1*082815dcSEvan Baconimport * as WarningAggregator from '../../utils/warnings'; 2*082815dcSEvan Baconimport { 3*082815dcSEvan Bacon getVersionCode, 4*082815dcSEvan Bacon getVersionName, 5*082815dcSEvan Bacon setMinBuildScriptExtVersion, 6*082815dcSEvan Bacon setVersionCode, 7*082815dcSEvan Bacon setVersionName, 8*082815dcSEvan Bacon} from '../Version'; 9*082815dcSEvan Bacon 10*082815dcSEvan Bacon// TODO: use fixtures for manifest/build.gradle instead of inline strings 11*082815dcSEvan Bacon 12*082815dcSEvan Baconconst EXAMPLE_BUILD_GRADLE = ` 13*082815dcSEvan Baconandroid { 14*082815dcSEvan Bacon compileSdkVersion rootProject.ext.compileSdkVersion 15*082815dcSEvan Bacon buildToolsVersion rootProject.ext.buildToolsVersion 16*082815dcSEvan Bacon 17*082815dcSEvan Bacon defaultConfig { 18*082815dcSEvan Bacon applicationId "com.helloworld" 19*082815dcSEvan Bacon minSdkVersion rootProject.ext.minSdkVersion 20*082815dcSEvan Bacon targetSdkVersion rootProject.ext.targetSdkVersion 21*082815dcSEvan Bacon versionCode 1 22*082815dcSEvan Bacon versionName "1.2.3" 23*082815dcSEvan Bacon } 24*082815dcSEvan Bacon} 25*082815dcSEvan Bacon`; 26*082815dcSEvan Bacon 27*082815dcSEvan Baconconst EXAMPLE_BUILD_GRADLE_2 = ` 28*082815dcSEvan Baconandroid { 29*082815dcSEvan Bacon compileSdkVersion rootProject.ext.compileSdkVersion 30*082815dcSEvan Bacon buildToolsVersion rootProject.ext.buildToolsVersion 31*082815dcSEvan Bacon 32*082815dcSEvan Bacon defaultConfig { 33*082815dcSEvan Bacon applicationId "com.helloworld" 34*082815dcSEvan Bacon minSdkVersion rootProject.ext.minSdkVersion 35*082815dcSEvan Bacon targetSdkVersion rootProject.ext.targetSdkVersion 36*082815dcSEvan Bacon versionCode 4 37*082815dcSEvan Bacon versionName "2.0" 38*082815dcSEvan Bacon } 39*082815dcSEvan Bacon} 40*082815dcSEvan Bacon`; 41*082815dcSEvan Bacon 42*082815dcSEvan Baconconst EXAMPLE_PROJECT_BUILD_GRADLE = ` 43*082815dcSEvan Baconbuildscript { 44*082815dcSEvan Bacon ext { 45*082815dcSEvan Bacon buildToolsVersion = "29.0.3" 46*082815dcSEvan Bacon minSdkVersion = 21 47*082815dcSEvan Bacon compileSdkVersion = 30 48*082815dcSEvan Bacon targetSdkVersion = 30 49*082815dcSEvan Bacon oddFormat = 30.2 50*082815dcSEvan Bacon } 51*082815dcSEvan Bacon repositories { 52*082815dcSEvan Bacon } 53*082815dcSEvan Bacon dependencies { 54*082815dcSEvan Bacon } 55*082815dcSEvan Bacon} 56*082815dcSEvan Bacon 57*082815dcSEvan Baconallprojects { 58*082815dcSEvan Bacon repositories { 59*082815dcSEvan Bacon mavenLocal() 60*082815dcSEvan Bacon maven { 61*082815dcSEvan Bacon // Android JSC is installed from npm 62*082815dcSEvan Bacon url(new File(["node", "--print", "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), "../dist")) 63*082815dcSEvan Bacon } 64*082815dcSEvan Bacon } 65*082815dcSEvan Bacon} 66*082815dcSEvan Bacon`; 67*082815dcSEvan Bacon 68*082815dcSEvan Bacondescribe('versionName', () => { 69*082815dcSEvan Bacon it(`returns null if no version is provided`, () => { 70*082815dcSEvan Bacon expect(getVersionName({})).toBe(null); 71*082815dcSEvan Bacon }); 72*082815dcSEvan Bacon 73*082815dcSEvan Bacon it(`returns the version name if provided`, () => { 74*082815dcSEvan Bacon expect(getVersionName({ version: '1.2.3' })).toBe('1.2.3'); 75*082815dcSEvan Bacon }); 76*082815dcSEvan Bacon 77*082815dcSEvan Bacon it(`sets the version name in build.gradle if version name is given`, () => { 78*082815dcSEvan Bacon expect(setVersionName({ version: '1.2.3' }, EXAMPLE_BUILD_GRADLE)).toMatch( 79*082815dcSEvan Bacon 'versionName "1.2.3"' 80*082815dcSEvan Bacon ); 81*082815dcSEvan Bacon }); 82*082815dcSEvan Bacon 83*082815dcSEvan Bacon it(`replaces provided version name in build.gradle if version name is not the default`, () => { 84*082815dcSEvan Bacon expect(setVersionName({ version: '1.2.3' }, EXAMPLE_BUILD_GRADLE_2)).toMatch( 85*082815dcSEvan Bacon 'versionName "1.2.3"' 86*082815dcSEvan Bacon ); 87*082815dcSEvan Bacon }); 88*082815dcSEvan Bacon}); 89*082815dcSEvan Bacon 90*082815dcSEvan Bacondescribe('versionCode', () => { 91*082815dcSEvan Bacon it(`returns 1 if no version code is provided`, () => { 92*082815dcSEvan Bacon expect(getVersionCode({})).toBe(1); 93*082815dcSEvan Bacon }); 94*082815dcSEvan Bacon 95*082815dcSEvan Bacon it(`returns the version code if provided`, () => { 96*082815dcSEvan Bacon expect(getVersionCode({ android: { versionCode: 5 } })).toBe(5); 97*082815dcSEvan Bacon }); 98*082815dcSEvan Bacon 99*082815dcSEvan Bacon it(`sets the version code in build.gradle if version code is given`, () => { 100*082815dcSEvan Bacon expect(setVersionCode({ android: { versionCode: 5 } }, EXAMPLE_BUILD_GRADLE)).toMatch( 101*082815dcSEvan Bacon 'versionCode 5' 102*082815dcSEvan Bacon ); 103*082815dcSEvan Bacon }); 104*082815dcSEvan Bacon 105*082815dcSEvan Bacon it(`replaces provided version code in build.gradle if version code is given`, () => { 106*082815dcSEvan Bacon expect(setVersionCode({ android: { versionCode: 5 } }, EXAMPLE_BUILD_GRADLE_2)).toMatch( 107*082815dcSEvan Bacon 'versionCode 5' 108*082815dcSEvan Bacon ); 109*082815dcSEvan Bacon }); 110*082815dcSEvan Bacon}); 111*082815dcSEvan Bacon 112*082815dcSEvan Bacondescribe(setMinBuildScriptExtVersion, () => { 113*082815dcSEvan Bacon beforeEach(() => { 114*082815dcSEvan Bacon // @ts-ignore: jest 115*082815dcSEvan Bacon // eslint-disable-next-line import/namespace 116*082815dcSEvan Bacon WarningAggregator.addWarningAndroid = jest.fn(); 117*082815dcSEvan Bacon }); 118*082815dcSEvan Bacon 119*082815dcSEvan Bacon it(`sets the minSdkVersion in build.gradle if minSdkVersion is given`, () => { 120*082815dcSEvan Bacon expect( 121*082815dcSEvan Bacon setMinBuildScriptExtVersion(EXAMPLE_PROJECT_BUILD_GRADLE, { 122*082815dcSEvan Bacon name: 'minSdkVersion', 123*082815dcSEvan Bacon minVersion: 22, 124*082815dcSEvan Bacon }) 125*082815dcSEvan Bacon ).toMatch(/minSdkVersion = 22/); 126*082815dcSEvan Bacon expect(WarningAggregator.addWarningAndroid).not.toHaveBeenCalled(); 127*082815dcSEvan Bacon }); 128*082815dcSEvan Bacon 129*082815dcSEvan Bacon it(`sets the oddFormat in build.gradle if oddFormat is given`, () => { 130*082815dcSEvan Bacon expect( 131*082815dcSEvan Bacon setMinBuildScriptExtVersion(EXAMPLE_PROJECT_BUILD_GRADLE, { 132*082815dcSEvan Bacon name: 'oddFormat', 133*082815dcSEvan Bacon minVersion: 30.3, 134*082815dcSEvan Bacon }) 135*082815dcSEvan Bacon ).toMatch(/oddFormat = 30\.3/); 136*082815dcSEvan Bacon expect(WarningAggregator.addWarningAndroid).not.toHaveBeenCalled(); 137*082815dcSEvan Bacon }); 138*082815dcSEvan Bacon it(`does not change the compileSdkVersion in build.gradle if compileSdkVersion is lower than the existing value`, () => { 139*082815dcSEvan Bacon expect( 140*082815dcSEvan Bacon setMinBuildScriptExtVersion(EXAMPLE_PROJECT_BUILD_GRADLE, { 141*082815dcSEvan Bacon name: 'compileSdkVersion', 142*082815dcSEvan Bacon minVersion: 12, 143*082815dcSEvan Bacon }) 144*082815dcSEvan Bacon ).toBe(EXAMPLE_PROJECT_BUILD_GRADLE); 145*082815dcSEvan Bacon expect(WarningAggregator.addWarningAndroid).not.toHaveBeenCalled(); 146*082815dcSEvan Bacon }); 147*082815dcSEvan Bacon it(`warns when it cannot find the requested value`, () => { 148*082815dcSEvan Bacon expect( 149*082815dcSEvan Bacon setMinBuildScriptExtVersion(EXAMPLE_PROJECT_BUILD_GRADLE, { 150*082815dcSEvan Bacon name: 'foobar', 151*082815dcSEvan Bacon minVersion: 12, 152*082815dcSEvan Bacon }) 153*082815dcSEvan Bacon ).toBe(EXAMPLE_PROJECT_BUILD_GRADLE); 154*082815dcSEvan Bacon expect(WarningAggregator.addWarningAndroid).toBeCalledWith( 155*082815dcSEvan Bacon 'withBuildScriptExtVersion', 156*082815dcSEvan Bacon 'Cannot set minimum buildscript.ext.foobar version because the property "foobar" cannot be found or does not have a numeric value.' 157*082815dcSEvan Bacon ); 158*082815dcSEvan Bacon }); 159*082815dcSEvan Bacon it(`does warns when targeting a property with a string value`, () => { 160*082815dcSEvan Bacon expect( 161*082815dcSEvan Bacon setMinBuildScriptExtVersion(EXAMPLE_PROJECT_BUILD_GRADLE, { 162*082815dcSEvan Bacon name: 'buildToolsVersion', 163*082815dcSEvan Bacon minVersion: 12, 164*082815dcSEvan Bacon }) 165*082815dcSEvan Bacon ).toBe(EXAMPLE_PROJECT_BUILD_GRADLE); 166*082815dcSEvan Bacon expect(WarningAggregator.addWarningAndroid).toBeCalledWith( 167*082815dcSEvan Bacon 'withBuildScriptExtVersion', 168*082815dcSEvan Bacon 'Cannot set minimum buildscript.ext.buildToolsVersion version because the property "buildToolsVersion" cannot be found or does not have a numeric value.' 169*082815dcSEvan Bacon ); 170*082815dcSEvan Bacon }); 171*082815dcSEvan Bacon}); 172