Skip to content

Commit dcc78bf

Browse files
Dimitar TachevDimitar Tachev
Dimitar Tachev
authored and
Dimitar Tachev
committed
refactor: create a common injector stub
1 parent 86f7f38 commit dcc78bf

File tree

3 files changed

+65
-59
lines changed

3 files changed

+65
-59
lines changed

lib/services/android-plugin-build-service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
259259
return runtimeGradleVersions || {};
260260
}
261261

262-
private getGradleVersions(packageData: any): IRuntimeGradleVersions {
262+
private getGradleVersions(packageData: { gradle: { version: string, android: string }}): IRuntimeGradleVersions {
263263
const packageJsonGradle = packageData && packageData.gradle;
264264
let runtimeVersions: IRuntimeGradleVersions = null;
265265
if (packageJsonGradle && (packageJsonGradle.version || packageJsonGradle.android)) {

test/services/android-plugin-build-service.ts

+32-57
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
11
import { AndroidPluginBuildService } from "../../lib/services/android-plugin-build-service";
2-
import { Yok } from "../../lib/common/yok";
32
import { assert } from "chai";
3+
import { INCLUDE_GRADLE_NAME } from "../../lib/constants";
4+
import { getShortPluginName } from "../../lib/common/helpers";
45
import * as FsLib from "../../lib/common/file-system";
56
import * as path from "path";
6-
import { HostInfo } from "../../lib/common/host-info";
7-
import { Logger } from "../../lib/common/logger";
8-
import * as ErrorsLib from "../../lib/common/errors";
9-
import temp = require("temp");
10-
import { INCLUDE_GRADLE_NAME } from "../../lib/constants";
117
import * as stubs from "../stubs";
12-
import { DevicePlatformsConstants } from "../../lib/common/mobile/device-platforms-constants";
13-
import { getShortPluginName } from "../../lib/common/helpers";
8+
import temp = require("temp");
149

1510
temp.track();
1611

17-
describe.only('androidPluginBuildService', () => {
12+
describe('androidPluginBuildService', () => {
1813
const pluginName = 'my-plugin';
1914
const shortPluginName = getShortPluginName(pluginName);
2015
let spawnFromEventCalled = false;
@@ -40,7 +35,7 @@ describe.only('androidPluginBuildService', () => {
4035
tempFolder = temp.mkdirSync("androidPluginBuildService-temp");
4136
pluginFolder = temp.mkdirSync("androidPluginBuildService-plugin");
4237
setupDI(options);
43-
setupPluginFolders(options.addManifest, options.addResFolder, options.addAssetsFolder, options.addLegacyIncludeGradle);
38+
setupPluginFolders(options);
4439

4540
return {
4641
platformsAndroidDirPath: pluginFolder,
@@ -58,7 +53,7 @@ describe.only('androidPluginBuildService', () => {
5853
projectRuntimeGradleVersion?: string,
5954
projectRuntimeGradleAndroidVersion?: string,
6055
}): void {
61-
const testInjector: IInjector = new Yok();
56+
const testInjector: IInjector = new stubs.InjectorStub();
6257
testInjector.register("fs", FsLib.FileSystem);
6358
testInjector.register("childProcess", {
6459
spawnFromEvent: async (command: string): Promise<ISpawnResult> => {
@@ -69,31 +64,11 @@ describe.only('androidPluginBuildService', () => {
6964
return null;
7065
}
7166
});
72-
testInjector.register("hostInfo", HostInfo);
73-
testInjector.register("androidToolsInfo", {
74-
getToolsInfo: () => {
75-
return {};
76-
},
77-
validateInfo: () => {
78-
return true;
79-
}
80-
});
81-
testInjector.register("logger", Logger);
82-
testInjector.register("errors", ErrorsLib.Errors);
83-
testInjector.register("options", {});
84-
testInjector.register("config", {});
85-
testInjector.register("staticConfig", {});
86-
testInjector.register("hooksService", {
87-
executeBeforeHooks: async (commandName: string, hookArguments?: IDictionary<any>): Promise<void> => undefined,
88-
executeAfterHooks: async (commandName: string, hookArguments?: IDictionary<any>): Promise<void> => undefined
89-
});
90-
testInjector.register('projectDataService', stubs.ProjectDataService);
9167
testInjector.register('platformService', {
9268
getCurrentPlatformVersion: (platform: string, projectData: IProjectData): string => {
9369
return options.addProjectRuntime ? "1.0.0" : null;
9470
}
9571
});
96-
testInjector.register('devicePlatformsConstants', DevicePlatformsConstants);
9772
testInjector.register('npm', setupNpm(options));
9873

9974
fs = testInjector.resolve("fs");
@@ -132,27 +107,12 @@ describe.only('androidPluginBuildService', () => {
132107
};
133108
}
134109

135-
function setUpIncludeGradle() {
136-
const validIncludeGradleContent = `android {
137-
productFlavors {
138-
"nativescript-pro-ui" {
139-
dimension "nativescript-pro-ui"
140-
}
141-
}
142-
}
143-
144-
def supportVersion = project.hasProperty("supportVersion") ? project.supportVersion : "23.3.0"
145-
146-
dependencies {
147-
compile "com.android.support:appcompat-v7:$supportVersion"
148-
compile "com.android.support:recyclerview-v7:$supportVersion"
149-
compile "com.android.support:design:$supportVersion"
150-
}`;
151-
152-
fs.writeFile(path.join(pluginFolder, INCLUDE_GRADLE_NAME), validIncludeGradleContent);
153-
}
154-
155-
function setupPluginFolders(manifestFile: boolean, resFolder: boolean, assetsFolder: boolean, addLegacyIncludeGradle: boolean) {
110+
function setupPluginFolders(options: {
111+
addManifest?: boolean,
112+
addResFolder?: boolean,
113+
addAssetsFolder?: boolean,
114+
addLegacyIncludeGradle?: boolean
115+
}) {
156116
const validAndroidManifestContent = `<?xml version="1.0" encoding="UTF-8"?>
157117
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
158118
</manifest>`;
@@ -162,25 +122,40 @@ dependencies {
162122
name="string_name"
163123
>text_string</string>
164124
</resources>`;
125+
const validIncludeGradleContent = `android {
126+
productFlavors {
127+
"nativescript-pro-ui" {
128+
dimension "nativescript-pro-ui"
129+
}
130+
}
131+
}
132+
133+
def supportVersion = project.hasProperty("supportVersion") ? project.supportVersion : "23.3.0"
134+
135+
dependencies {
136+
compile "com.android.support:appcompat-v7:$supportVersion"
137+
compile "com.android.support:recyclerview-v7:$supportVersion"
138+
compile "com.android.support:design:$supportVersion"
139+
}`;
165140

166-
if (manifestFile) {
141+
if (options.addManifest) {
167142
fs.writeFile(path.join(pluginFolder, "AndroidManifest.xml"), validAndroidManifestContent);
168143
}
169144

170-
if (resFolder) {
145+
if (options.addResFolder) {
171146
const valuesFolder = path.join(pluginFolder, "res", "values");
172147
fs.createDirectory(valuesFolder);
173148
fs.writeFile(path.join(valuesFolder, "strings.xml"), validStringsXmlContent);
174149
}
175150

176-
if (assetsFolder) {
151+
if (options.addAssetsFolder) {
177152
const imagesFolder = path.join(pluginFolder, "assets", "images");
178153
fs.createDirectory(imagesFolder);
179154
fs.writeFile(path.join(imagesFolder, "myicon.png"), "123");
180155
}
181156

182-
if (addLegacyIncludeGradle) {
183-
setUpIncludeGradle();
157+
if (options.addLegacyIncludeGradle) {
158+
fs.writeFile(path.join(pluginFolder, INCLUDE_GRADLE_NAME), validIncludeGradleContent);
184159
}
185160
}
186161

test/stubs.ts

+32-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import * as util from "util";
44
import * as chai from "chai";
55
import { EventEmitter } from "events";
66
import { SpawnOptions } from "child_process";
7-
87
import * as path from "path";
98
import * as constants from "./../lib/constants";
9+
import { Yok } from "./../lib/common/yok";
10+
import { HostInfo } from "./../lib/common/host-info";
11+
import { DevicePlatformsConstants } from "./../lib/common/mobile/device-platforms-constants";
1012

1113
export class LoggerStub implements ILogger {
1214
setLevel(level: string): void { }
@@ -851,3 +853,32 @@ export class AndroidResourcesMigrationServiceStub implements IAndroidResourcesMi
851853
return Promise.resolve();
852854
}
853855
}
856+
857+
export class InjectorStub extends Yok implements IInjector {
858+
constructor() {
859+
super();
860+
this.register("fs", FileSystemStub);
861+
this.register("hostInfo", HostInfo);
862+
this.register("androidToolsInfo", AndroidToolsInfoStub);
863+
this.register("logger", LoggerStub);
864+
this.register("errors", ErrorsStub);
865+
this.register("options", {});
866+
this.register("config", {});
867+
this.register("staticConfig", {});
868+
this.register("hooksService", HooksServiceStub);
869+
this.register('projectDataService', ProjectDataService);
870+
this.register('devicePlatformsConstants', DevicePlatformsConstants);
871+
this.register("emulatorPlatformService", EmulatorPlatformService);
872+
this.register("androidResourcesMigrationService", AndroidResourcesMigrationServiceStub);
873+
this.register("platformService", PlatformServiceStub);
874+
this.register("commandsService", CommandsService);
875+
this.register("projectChangesService", ProjectChangesService);
876+
this.register('childProcess', ChildProcessStub);
877+
this.register("liveSyncService", LiveSyncServiceStub);
878+
this.register("prompter", PrompterStub);
879+
this.register('platformsData', PlatformsDataStub);
880+
this.register("androidPluginBuildService", AndroidPluginBuildServiceStub);
881+
this.register('projectData', ProjectDataStub);
882+
this.register('npmInstallationManager', NpmInstallationManagerStub);
883+
}
884+
}

0 commit comments

Comments
 (0)