blob: a2e677efdcea3ed9f3e5f5623fbc592ffc4a1f6c [file] [log] [blame]
import {
GitHubRelease,
parse_requested_sdl_version,
SdlVersion,
SdlRelease,
SdlReleaseDb,
SdlReleaseType,
} from "./version";
import { describe, expect, test } from "@jest/globals";
const GH_RELEASE_OUTPUT = ""
+ "3.1.1\tLatest\tprerelease-3.1.1\t2023-12-25T18:45:17Z\n"
+ "2.28.0\tLatest\trelease-2.28.0\t2023-06-20T18:45:17Z\n"
+ "2.28.0 RC1\tPre-release\tprerelease-2.27.1\t2023-06-14T03:59:14Z\n"
+ "2.26.5\t\trelease-2.26.5\t2023-04-05T19:35:40Z\n"
+ "2.26.4\t\trelease-2.26.4\t2023-03-07T00:17:02Z\n"
+ "2.26.3\t\trelease-2.26.3\t2023-02-06T23:31:56Z\n"
+ "2.26.2\t\trelease-2.26.2\t2023-01-03T15:08:11Z\n"
+ "2.26.1\t\trelease-2.26.1\t2022-12-01T20:33:11Z\n"
+ "2.26.0\t\trelease-2.26.0\t2022-11-22T00:28:26Z\n"
+ "2.26.0 RC1\tPre-release\tprerelease-2.25.1\t2022-11-17T17:49:02Z\n"
+ "2.24.2\t\trelease-2.24.2\t2022-11-01T13:39:15Z\n"
+ "2.24.1\t\trelease-2.24.1\t2022-10-05T00:16:33Z\n"
+ "2.24.0\t\trelease-2.24.0\t2022-08-19T16:04:03Z\n"
+ "2.0.22\t\trelease-2.0.22\t2022-04-25T19:20:25Z\n"
+ "2.0.20\t\trelease-2.0.20\t2022-01-11T01:03:58Z\n"
+ "2.0.18\t\trelease-2.0.18\t2021-11-30T17:15:42Z\n"
+ "2.0.16\t\trelease-2.0.16\t2021-08-10T16:03:15Z\n"
+ "2.0.14\t\trelease-2.0.14\t2021-07-08T17:14:16Z\n"
+ "2.0.12\t\trelease-2.0.12\t2022-05-24T22:37:24Z\n"
+ "2.0.10\t\trelease-2.0.10\t2022-05-24T22:35:08Z\n"
+ "2.0.9\t\trelease-2.0.9\t2022-05-24T22:33:03Z\n"
+ "2.0.8\t\trelease-2.0.8\t2022-05-23T22:20:21Z\n"
;
describe("testing parsing of version string", () => {
function add_parse_to_version_test(
input: string,
major: number,
minor: number,
patch: number,
type: SdlReleaseType
) {
test(`test ${input}`, () => {
const result = parse_requested_sdl_version(input);
expect(result).toBeTruthy();
if (result) {
expect(result.version).toStrictEqual(
new SdlVersion({ major: major, minor: minor, patch: patch })
);
expect(result.type).toStrictEqual(type);
}
});
}
function add_invalid_version_test(input: string) {
test(`test ${input}`, () => {
const result = parse_requested_sdl_version(input);
expect(result).toBeNull();
});
}
add_parse_to_version_test("2-any", 2, 0, 0, SdlReleaseType.Any);
add_parse_to_version_test("sdl2-any", 2, 0, 0, SdlReleaseType.Any);
add_parse_to_version_test("SDL2-any", 2, 0, 0, SdlReleaseType.Any);
add_parse_to_version_test("3-any", 3, 0, 0, SdlReleaseType.Any);
add_parse_to_version_test("SDL3-any", 3, 0, 0, SdlReleaseType.Any);
add_parse_to_version_test("sdl3-any", 3, 0, 0, SdlReleaseType.Any);
add_parse_to_version_test("2-head", 2, 0, 0, SdlReleaseType.Head);
add_parse_to_version_test("sdl2-head", 2, 0, 0, SdlReleaseType.Head);
add_parse_to_version_test("SDL2-head", 2, 0, 0, SdlReleaseType.Head);
add_parse_to_version_test("3-head", 3, 0, 0, SdlReleaseType.Head);
add_parse_to_version_test("SDL3-head", 3, 0, 0, SdlReleaseType.Head);
add_parse_to_version_test("sdl3-head", 3, 0, 0, SdlReleaseType.Head);
add_parse_to_version_test("2-latest", 2, 0, 0, SdlReleaseType.Latest);
add_parse_to_version_test("sdl2-latest", 2, 0, 0, SdlReleaseType.Latest);
add_parse_to_version_test("SDL2-latest", 2, 0, 0, SdlReleaseType.Latest);
add_parse_to_version_test("3-latest", 3, 0, 0, SdlReleaseType.Latest);
add_parse_to_version_test("SDL3-latest", 3, 0, 0, SdlReleaseType.Latest);
add_parse_to_version_test("sdl3-latest", 3, 0, 0, SdlReleaseType.Latest);
add_parse_to_version_test("2.22.1", 2, 22, 1, SdlReleaseType.Exact);
add_parse_to_version_test("2.0.18", 2, 0, 18, SdlReleaseType.Exact);
add_parse_to_version_test("3.2.0", 3, 2, 0, SdlReleaseType.Exact);
add_parse_to_version_test("3.2.2", 3, 2, 2, SdlReleaseType.Exact);
add_parse_to_version_test("SDL2.22.1", 2, 22, 1, SdlReleaseType.Exact);
add_parse_to_version_test("SDL2.0.18", 2, 0, 18, SdlReleaseType.Exact);
add_parse_to_version_test("SDL3.2.0", 3, 2, 0, SdlReleaseType.Exact);
add_parse_to_version_test("SDL3.2.2", 3, 2, 2, SdlReleaseType.Exact);
add_invalid_version_test("f168f9c81326ad374aade49d1dc46f245b20d07a");
add_invalid_version_test("main");
add_invalid_version_test("SDL2");
});
describe("test finding a release", () => {
const github_releases = GitHubRelease.from_gh_output(GH_RELEASE_OUTPUT);
const sdl_release_db = SdlReleaseDb.create(github_releases);
expect(sdl_release_db.releases).toBeTruthy();
test(`test finding exact 2.0.22 release`, () => {
const v = new SdlVersion({ major: 2, minor: 0, patch: 22 });
const rel = sdl_release_db.find(v, true, SdlReleaseType.Exact);
expect(rel).not.toBeNull();
if (rel) {
expect(rel.version).toStrictEqual(v);
expect(rel.prerelease).toBeFalsy();
}
});
test(`test finding exact 2.26.1 release`, () => {
const v = new SdlVersion({ major: 2, minor: 26, patch: 1 });
const rel = sdl_release_db.find(v, true, SdlReleaseType.Exact);
expect(rel).not.toBeNull();
if (rel) {
expect(rel.version).toStrictEqual(v);
expect(rel.prerelease).toBeFalsy();
}
});
test(`test finding latest 2 release`, () => {
const v = new SdlVersion({ major: 2, minor: 0, patch: 0 });
const rel = sdl_release_db.find(v, true, SdlReleaseType.Latest);
expect(rel).not.toBeNull();
if (rel) {
// 2.26.5 exists, so the result must be > 2.26.4
expect(rel.version.compare(new SdlVersion("2.26.4"))).toBeLessThan(0);
expect(rel.version.major).toBe(2);
}
});
test(`test finding latest non-prerelease 2 release`, () => {
const v = new SdlVersion({ major: 2, minor: 0, patch: 0 });
const rel = sdl_release_db.find(v, false, SdlReleaseType.Latest);
expect(rel).not.toBeNull();
if (rel) {
// 2.26.5 exists, so the result must be > 2.26.4
expect(rel.version.compare(new SdlVersion("2.26.4"))).toBeLessThan(0);
expect(rel.version.major).toBe(2);
expect(rel.prerelease).toBeFalsy();
}
});
test(`test finding any 2 release`, () => {
const v = new SdlVersion({ major: 2, minor: 0, patch: 0 });
const rel = sdl_release_db.find(v, true, SdlReleaseType.Any);
expect(rel).not.toBeNull();
if (rel) {
// 2.26.5 exists, so the result must be > 2.26.4
expect(rel.version.major).toBe(2);
}
});
test(`test finding any 3 release`, () => {
const v = new SdlVersion({ major: 3, minor: 0, patch: 0 });
const rel = sdl_release_db.find(v, true, SdlReleaseType.Any);
expect(rel).not.toBeNull();
if (rel) {
// FIXME: Only 3.0.0-prerelease exists at the moment
expect(rel.version.compare(new SdlVersion("3.0.0"))).toBeLessThanOrEqual(
0
);
expect(rel.version.major).toBe(3);
}
});
});