refactor: remove shelljs dependency (#842)

Co-authored-by: エリス <erisu@users.noreply.github.com>
This commit is contained in:
Norman Breau
2020-01-28 21:12:55 -04:00
committed by GitHub
parent dee1e77d0b
commit 3712619f5c
20 changed files with 702 additions and 511 deletions
+17 -47
View File
@@ -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);
});
});
});