import {describe, it, expect} from '@jest/globals' import {GitVersion} from '../src/git-version.js' import {MinimumGitSparseCheckoutVersion} from '../src/git-command-manager.js' describe('git-version tests', () => { it('basics', async () => { let version = new GitVersion('') expect(version.isValid()).toBeFalsy() version = new GitVersion('asdf') expect(version.isValid()).toBeFalsy() version = new GitVersion('1.2') expect(version.isValid()).toBeTruthy() expect(version.toString()).toBe('1.2') version = new GitVersion('1.2.3') expect(version.isValid()).toBeTruthy() expect(version.toString()).toBe('1.2.3') }) it('check minimum', async () => { let version = new GitVersion('4.5') expect(version.checkMinimum(new GitVersion('3.6'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('3.6.7'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('4.4'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('4.5'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('4.5.0'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('4.6'))).toBeFalsy() expect(version.checkMinimum(new GitVersion('4.6.0'))).toBeFalsy() expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy() expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy() version = new GitVersion('4.5.6') expect(version.checkMinimum(new GitVersion('3.6'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('3.6.7'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('4.4'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('4.5'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('4.5.5'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('4.5.6'))).toBeTruthy() expect(version.checkMinimum(new GitVersion('4.5.7'))).toBeFalsy() expect(version.checkMinimum(new GitVersion('4.6'))).toBeFalsy() expect(version.checkMinimum(new GitVersion('4.6.0'))).toBeFalsy() expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy() expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy() }) it('compares an explicit patch of zero', async () => { // A patch component of zero must be compared, not treated as unspecified // (0 is falsy). A patch left unspecified by a two-part version such as // "2.28" is treated as satisfying any patch of that minor version. expect( new GitVersion('4.5.0').checkMinimum(new GitVersion('4.5.1')) ).toBeFalsy() expect( new GitVersion('2.28.0').checkMinimum(new GitVersion('2.28.1')) ).toBeFalsy() expect( new GitVersion('4.5.0').checkMinimum(new GitVersion('4.5.0')) ).toBeTruthy() expect( new GitVersion('4.5.0').checkMinimum(new GitVersion('4.5')) ).toBeTruthy() expect( new GitVersion('4.5.1').checkMinimum(new GitVersion('4.5.0')) ).toBeTruthy() // Unspecified patch satisfies any patch of the same minor version expect( new GitVersion('4.5').checkMinimum(new GitVersion('4.5.0')) ).toBeTruthy() }) it('sparse checkout', async () => { const minSparseVer = MinimumGitSparseCheckoutVersion expect(new GitVersion('1.0').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('1.99').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.0').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.24').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.24.0').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.24.9').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.25').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.25.0').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.25.1').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.25.9').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.26').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.26.0').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.26.1').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.26.9').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.27').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.27.0').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.27.1').checkMinimum(minSparseVer)).toBeFalsy() expect(new GitVersion('2.27.9').checkMinimum(minSparseVer)).toBeFalsy() // /--------------------------------------- // ^^^ before / after vvv // --------------------------/ expect(new GitVersion('2.28').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('2.28.0').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('2.28.1').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('2.28.9').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('2.29').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('2.29.0').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('2.29.1').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('2.29.9').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('2.99').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('3.0').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('3.99').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('4.0').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('4.99').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('5.0').checkMinimum(minSparseVer)).toBeTruthy() expect(new GitVersion('5.99').checkMinimum(minSparseVer)).toBeTruthy() }) })