mirror of
https://github.com/apache/cordova-android.git
synced 2026-04-23 00:00:09 +08:00
refactor: remove shelljs dependency (#842)
Co-authored-by: エリス <erisu@users.noreply.github.com>
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
under the License.
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const fs = require('fs-extra');
|
||||
const path = require('path');
|
||||
const rewire = require('rewire');
|
||||
|
||||
@@ -215,20 +215,20 @@ describe('ProjectBuilder', () => {
|
||||
});
|
||||
|
||||
describe('clean', () => {
|
||||
let shellSpy;
|
||||
|
||||
beforeEach(() => {
|
||||
shellSpy = jasmine.createSpyObj('shell', ['rm']);
|
||||
ProjectBuilder.__set__('shell', shellSpy);
|
||||
const marker = ProjectBuilder.__get__('MARKER');
|
||||
spyOn(fs, 'readFileSync').and.returnValue(`Some Header Here: ${marker}`);
|
||||
spyOn(fs, 'removeSync');
|
||||
spyOn(builder, 'getArgs');
|
||||
execaSpy.and.returnValue(Promise.resolve());
|
||||
});
|
||||
|
||||
it('should get arguments for cleaning', () => {
|
||||
const opts = {};
|
||||
builder.clean(opts);
|
||||
|
||||
expect(builder.getArgs).toHaveBeenCalledWith('clean', opts);
|
||||
return builder.clean(opts).then(() => {
|
||||
expect(builder.getArgs).toHaveBeenCalledWith('clean', opts);
|
||||
});
|
||||
});
|
||||
|
||||
it('should spawn gradle', () => {
|
||||
@@ -243,7 +243,7 @@ describe('ProjectBuilder', () => {
|
||||
|
||||
it('should remove "out" folder', () => {
|
||||
return builder.clean({}).then(() => {
|
||||
expect(shellSpy.rm).toHaveBeenCalledWith('-rf', path.join(rootDir, 'out'));
|
||||
expect(fs.removeSync).toHaveBeenCalledWith(path.join(rootDir, 'out'));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -251,13 +251,11 @@ describe('ProjectBuilder', () => {
|
||||
const debugSigningFile = path.join(rootDir, 'debug-signing.properties');
|
||||
const releaseSigningFile = path.join(rootDir, 'release-signing.properties');
|
||||
|
||||
const isAutoGeneratedSpy = jasmine.createSpy('isAutoGenerated');
|
||||
ProjectBuilder.__set__('isAutoGenerated', isAutoGeneratedSpy);
|
||||
isAutoGeneratedSpy.and.returnValue(true);
|
||||
spyOn(fs, 'existsSync').and.returnValue(true);
|
||||
|
||||
return builder.clean({}).then(() => {
|
||||
expect(shellSpy.rm).toHaveBeenCalledWith(jasmine.any(String), debugSigningFile);
|
||||
expect(shellSpy.rm).toHaveBeenCalledWith(jasmine.any(String), releaseSigningFile);
|
||||
expect(fs.removeSync).toHaveBeenCalledWith(debugSigningFile);
|
||||
expect(fs.removeSync).toHaveBeenCalledWith(releaseSigningFile);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -265,18 +263,16 @@ describe('ProjectBuilder', () => {
|
||||
const debugSigningFile = path.join(rootDir, 'debug-signing.properties');
|
||||
const releaseSigningFile = path.join(rootDir, 'release-signing.properties');
|
||||
|
||||
const isAutoGeneratedSpy = jasmine.createSpy('isAutoGenerated');
|
||||
ProjectBuilder.__set__('isAutoGenerated', isAutoGeneratedSpy);
|
||||
isAutoGeneratedSpy.and.returnValue(false);
|
||||
spyOn(fs, 'existsSync').and.returnValue(false);
|
||||
|
||||
return builder.clean({}).then(() => {
|
||||
expect(shellSpy.rm).not.toHaveBeenCalledWith(jasmine.any(String), debugSigningFile);
|
||||
expect(shellSpy.rm).not.toHaveBeenCalledWith(jasmine.any(String), releaseSigningFile);
|
||||
expect(fs.removeSync).not.toHaveBeenCalledWith(debugSigningFile);
|
||||
expect(fs.removeSync).not.toHaveBeenCalledWith(releaseSigningFile);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('apkSorter', () => {
|
||||
describe('fileSorter', () => {
|
||||
it('should sort APKs from most recent to oldest, deprioritising unsigned arch-specific builds', () => {
|
||||
const APKs = {
|
||||
'app-debug.apk': new Date('2018-04-20'),
|
||||
@@ -291,40 +287,14 @@ describe('ProjectBuilder', () => {
|
||||
const expectedResult = ['app-release.apk', 'app-debug.apk', 'app-release-unsigned.apk',
|
||||
'app-release-arm.apk', 'app-release-x86.apk', 'app-debug-x86.apk', 'app-debug-arm.apk'];
|
||||
|
||||
const fsSpy = jasmine.createSpyObj('fs', ['statSync']);
|
||||
fsSpy.statSync.and.callFake(filename => {
|
||||
spyOn(fs, 'statSync').and.callFake(filename => {
|
||||
return { mtime: APKs[filename] };
|
||||
});
|
||||
ProjectBuilder.__set__('fs', fsSpy);
|
||||
|
||||
const apkArray = Object.keys(APKs);
|
||||
const sortedApks = apkArray.sort(ProjectBuilder.__get__('apkSorter'));
|
||||
const sortedApks = apkArray.sort(ProjectBuilder.__get__('fileSorter'));
|
||||
|
||||
expect(sortedApks).toEqual(expectedResult);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isAutoGenerated', () => {
|
||||
let fsSpy;
|
||||
|
||||
beforeEach(() => {
|
||||
fsSpy = jasmine.createSpyObj('fs', ['existsSync', 'readFileSync']);
|
||||
fsSpy.existsSync.and.returnValue(true);
|
||||
ProjectBuilder.__set__('fs', fsSpy);
|
||||
});
|
||||
|
||||
it('should return true if the file contains the autogenerated marker', () => {
|
||||
const fileContents = `# DO NOT MODIFY - YOUR CHANGES WILL BE ERASED!`;
|
||||
fsSpy.readFileSync.and.returnValue(fileContents);
|
||||
|
||||
expect(ProjectBuilder.__get__('isAutoGenerated')()).toBe(true);
|
||||
});
|
||||
|
||||
it('should return false if the file does not contain the autogenerated marker', () => {
|
||||
const fileContents = `# My modified file`;
|
||||
fsSpy.readFileSync.and.returnValue(fileContents);
|
||||
|
||||
expect(ProjectBuilder.__get__('isAutoGenerated')()).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user