import {describe, it, expect} from '@jest/globals';
import {desugarVersion, pythonVersionToSemantic} from '../src/find-python.js';

describe('desugarVersion', () => {
  it.each([
    ['3.13', {version: '3.13', freethreaded: false}],
    ['3.13t', {version: '3.13', freethreaded: true}],
    ['3.13.1', {version: '3.13.1', freethreaded: false}],
    ['3.13.1t', {version: '3.13.1', freethreaded: true}],
    ['3.14-dev', {version: '~3.14.0-0', freethreaded: false}],
    ['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}]
  ])('%s -> %s', (input, expected) => {
    expect(desugarVersion(input)).toEqual(expected);
  });
});

// Test the combined desugarVersion and pythonVersionToSemantic functions
describe('pythonVersions', () => {
  it.each([
    ['3.13', {version: '3.13', freethreaded: false}],
    ['3.13t', {version: '3.13', freethreaded: true}],
    ['3.13.1', {version: '3.13.1', freethreaded: false}],
    ['3.13.1t', {version: '3.13.1', freethreaded: true}],
    ['3.14-dev', {version: '~3.14.0-0', freethreaded: false}],
    ['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}]
  ])('%s -> %s', (input, expected) => {
    const {version, freethreaded} = desugarVersion(input);
    const semanticVersionSpec = pythonVersionToSemantic(version, false);
    expect({version: semanticVersionSpec, freethreaded}).toEqual(expected);
  });

  it.each([
    ['3.13', {version: '~3.13.0-0', freethreaded: false}],
    ['3.13t', {version: '~3.13.0-0', freethreaded: true}],
    ['3.13.1', {version: '3.13.1', freethreaded: false}],
    ['3.13.1t', {version: '3.13.1', freethreaded: true}],
    ['3.14-dev', {version: '~3.14.0-0', freethreaded: false}],
    ['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}]
  ])('%s (allowPreReleases=true) -> %s', (input, expected) => {
    const {version, freethreaded} = desugarVersion(input);
    const semanticVersionSpec = pythonVersionToSemantic(version, true);
    expect({version: semanticVersionSpec, freethreaded}).toEqual(expected);
  });
});
