import { EmVer, notRange, rangeAnd, rangeOf, rangeOr } from "../emverLite/mod" describe("EmVer", () => { { { const checker = rangeOf("*") test("rangeOf('*')", () => { checker.check("1") checker.check("1.2") checker.check("1.2.3") checker.check("1.2.3.4") // @ts-expect-error checker.check("1.2.3.4.5") // @ts-expect-error checker.check("1.2.3.4.5.6") expect(checker.check("1")).toEqual(true) expect(checker.check("1.2")).toEqual(true) expect(checker.check("1.2.3.4")).toEqual(true) }) test("rangeOf('*') invalid", () => { // @ts-expect-error expect(() => checker.check("a")).toThrow() // @ts-expect-error expect(() => checker.check("")).toThrow() expect(() => checker.check("1..3")).toThrow() }) } { const checker = rangeOf(">1.2.3.4") test(`rangeOf(">1.2.3.4") valid`, () => { expect(checker.check("2-beta123")).toEqual(true) expect(checker.check("2")).toEqual(true) expect(checker.check("1.2.3.5")).toEqual(true) // @ts-expect-error expect(checker.check("1.2.3.4.1")).toEqual(true) }) test(`rangeOf(">1.2.3.4") invalid`, () => { expect(checker.check("1.2.3.4")).toEqual(false) expect(checker.check("1.2.3")).toEqual(false) expect(checker.check("1")).toEqual(false) }) } { const checker = rangeOf("=1.2.3") test(`rangeOf("=1.2.3") valid`, () => { expect(checker.check("1.2.3")).toEqual(true) }) test(`rangeOf("=1.2.3") invalid`, () => { expect(checker.check("2")).toEqual(false) expect(checker.check("1.2.3.1")).toEqual(false) expect(checker.check("1.2")).toEqual(false) }) } { const checker = rangeOf(">=1.2.3.4") test(`rangeOf(">=1.2.3.4") valid`, () => { expect(checker.check("2")).toEqual(true) expect(checker.check("1.2.3.5")).toEqual(true) // @ts-expect-error expect(checker.check("1.2.3.4.1")).toEqual(true) expect(checker.check("1.2.3.4")).toEqual(true) }) test(`rangeOf(">=1.2.3.4") invalid`, () => { expect(checker.check("1.2.3")).toEqual(false) expect(checker.check("1")).toEqual(false) }) } { const checker = rangeOf("<1.2.3.4") test(`rangeOf("<1.2.3.4") invalid`, () => { expect(checker.check("2")).toEqual(false) expect(checker.check("1.2.3.5")).toEqual(false) // @ts-expect-error expect(checker.check("1.2.3.4.1")).toEqual(false) expect(checker.check("1.2.3.4")).toEqual(false) }) test(`rangeOf("<1.2.3.4") valid`, () => { expect(checker.check("1.2.3")).toEqual(true) expect(checker.check("1")).toEqual(true) }) } { const checker = rangeOf("<=1.2.3.4") test(`rangeOf("<=1.2.3.4") invalid`, () => { expect(checker.check("2")).toEqual(false) expect(checker.check("1.2.3.5")).toEqual(false) // @ts-expect-error expect(checker.check("1.2.3.4.1")).toEqual(false) }) test(`rangeOf("<=1.2.3.4") valid`, () => { expect(checker.check("1.2.3")).toEqual(true) expect(checker.check("1")).toEqual(true) expect(checker.check("1.2.3.4")).toEqual(true) }) } { const checkA = rangeOf(">1") const checkB = rangeOf("<=2") const checker = rangeAnd(checkA, checkB) test(`simple and(checkers) valid`, () => { expect(checker.check("2")).toEqual(true) expect(checker.check("1.1")).toEqual(true) }) test(`simple and(checkers) invalid`, () => { expect(checker.check("2.1")).toEqual(false) expect(checker.check("1")).toEqual(false) expect(checker.check("0")).toEqual(false) }) } { const checkA = rangeOf("<1") const checkB = rangeOf("=2") const checker = rangeOr(checkA, checkB) test(`simple or(checkers) valid`, () => { expect(checker.check("2")).toEqual(true) expect(checker.check("0.1")).toEqual(true) }) test(`simple or(checkers) invalid`, () => { expect(checker.check("2.1")).toEqual(false) expect(checker.check("1")).toEqual(false) expect(checker.check("1.1")).toEqual(false) }) } { const checker = rangeOf("1.2.*") test(`rangeOf(1.2.*) valid`, () => { expect(checker.check("1.2")).toEqual(true) expect(checker.check("1.2.1")).toEqual(true) }) test(`rangeOf(1.2.*) invalid`, () => { expect(checker.check("1.3")).toEqual(false) expect(checker.check("1.3.1")).toEqual(false) expect(checker.check("1.1.1")).toEqual(false) expect(checker.check("1.1")).toEqual(false) expect(checker.check("1")).toEqual(false) expect(checker.check("2")).toEqual(false) }) } { const checker = notRange(rangeOf("1.2.*")) test(`notRange(rangeOf(1.2.*)) valid`, () => { expect(checker.check("1.3")).toEqual(true) expect(checker.check("1.3.1")).toEqual(true) expect(checker.check("1.1.1")).toEqual(true) expect(checker.check("1.1")).toEqual(true) expect(checker.check("1")).toEqual(true) expect(checker.check("2")).toEqual(true) }) test(`notRange(rangeOf(1.2.*)) invalid `, () => { expect(checker.check("1.2")).toEqual(false) expect(checker.check("1.2.1")).toEqual(false) }) } { const checker = rangeOf("!1.2.*") test(`!(rangeOf(1.2.*)) valid`, () => { expect(checker.check("1.3")).toEqual(true) expect(checker.check("1.3.1")).toEqual(true) expect(checker.check("1.1.1")).toEqual(true) expect(checker.check("1.1")).toEqual(true) expect(checker.check("1")).toEqual(true) expect(checker.check("2")).toEqual(true) }) test(`!(rangeOf(1.2.*)) invalid `, () => { expect(checker.check("1.2")).toEqual(false) expect(checker.check("1.2.1")).toEqual(false) }) } { test(`no and ranges`, () => { expect(() => rangeAnd()).toThrow() }) test(`no or ranges`, () => { expect(() => rangeOr()).toThrow() }) } { const checker = rangeOf("!>1.2.3.4") test(`rangeOf("!>1.2.3.4") invalid`, () => { expect(checker.check("2")).toEqual(false) expect(checker.check("1.2.3.5")).toEqual(false) // @ts-expect-error expect(checker.check("1.2.3.4.1")).toEqual(false) }) test(`rangeOf("!>1.2.3.4") valid`, () => { expect(checker.check("1.2.3.4")).toEqual(true) expect(checker.check("1.2.3")).toEqual(true) expect(checker.check("1")).toEqual(true) }) } { test(">1 && =1.2", () => { const checker = rangeOf(">1 && =1.2") expect(checker.check("1.2")).toEqual(true) expect(checker.check("1.2.1")).toEqual(false) }) test("=1 || =2", () => { const checker = rangeOf("=1 || =2") expect(checker.check("1")).toEqual(true) expect(checker.check("2")).toEqual(true) expect(checker.check("3")).toEqual(false) }) test(">1 && =1.2 || =2", () => { const checker = rangeOf(">1 && =1.2 || =2") expect(checker.check("1.2")).toEqual(true) expect(checker.check("1")).toEqual(false) expect(checker.check("2")).toEqual(true) expect(checker.check("3")).toEqual(false) }) test("&& before || order of operationns: <1.5 && >1 || >1.5 && <3", () => { const checker = rangeOf("<1.5 && >1 || >1.5 && <3") expect(checker.check("1.1")).toEqual(true) expect(checker.check("2")).toEqual(true) expect(checker.check("1.5")).toEqual(false) expect(checker.check("1")).toEqual(false) expect(checker.check("3")).toEqual(false) }) test("Compare function on the emver", () => { const a = EmVer.from("1.2.3") const b = EmVer.from("1.2.4") expect(a.compare(b)).toEqual("less") expect(b.compare(a)).toEqual("greater") expect(a.compare(a)).toEqual("equal") }) test("Compare for sort function on the emver", () => { const a = EmVer.from("1.2.3") const b = EmVer.from("1.2.4") expect(a.compareForSort(b)).toEqual(-1) expect(b.compareForSort(a)).toEqual(1) expect(a.compareForSort(a)).toEqual(0) }) } } })