diff --git a/lib/common b/lib/common index d5b8319094..f325d788fe 160000 --- a/lib/common +++ b/lib/common @@ -1 +1 @@ -Subproject commit d5b83190946bae0cbb2aae5d90d89128aeb63d15 +Subproject commit f325d788fe7304039465fde0091d9ae0f7f7c6a9 diff --git a/lib/definitions/project.d.ts b/lib/definitions/project.d.ts index 2e99a72bfd..4ec6eb1d49 100644 --- a/lib/definitions/project.d.ts +++ b/lib/definitions/project.d.ts @@ -401,12 +401,6 @@ interface IPlatformProjectService extends NodeJS.EventEmitter { executeCommand(projectRoot: string, args: any, childProcessOpts?: any, spawnFromEventOptions?: ISpawnFromEventOptions): Promise; } -interface IAndroidProjectPropertiesManager { - getProjectReferences(): Promise; - addProjectReference(referencePath: string): Promise; - removeProjectReference(referencePath: string): Promise; -} - interface ITestExecutionService { startTestRunner(platform: string, projectData: IProjectData, projectFilesConfig: IProjectFilesConfig): Promise; startKarmaServer(platform: string, projectData: IProjectData, projectFilesConfig: IProjectFilesConfig): Promise; diff --git a/lib/services/android-project-properties-manager.ts b/lib/services/android-project-properties-manager.ts deleted file mode 100644 index 71a1338b61..0000000000 --- a/lib/services/android-project-properties-manager.ts +++ /dev/null @@ -1,101 +0,0 @@ -import * as path from "path"; - -export class AndroidProjectPropertiesManager implements IAndroidProjectPropertiesManager { - private _editor: IPropertiesParserEditor = null; - private filePath: string = null; - private projectReferences: ILibRef[]; - private dirty = false; - - constructor(private $propertiesParser: IPropertiesParser, - private $logger: ILogger, - directoryPath: string) { - this.filePath = path.join(directoryPath, "project.properties"); - } - - public async getProjectReferences(): Promise { - if (!this.projectReferences || this.dirty) { - const allProjectProperties = await this.getAllProjectProperties(); - const allProjectPropertiesKeys = _.keys(allProjectProperties); - this.projectReferences = _(allProjectPropertiesKeys) - .filter(key => _.startsWith(key, "android.library.reference.")) - .map(key => this.createLibraryReference(key, allProjectProperties[key])) - .value(); - } - - return this.projectReferences; - } - - public async addProjectReference(referencePath: string): Promise { - const references = await this.getProjectReferences(); - const libRefExists = _.some(references, r => path.normalize(r.path) === path.normalize(referencePath)); - if (!libRefExists) { - await this.addToPropertyList("android.library.reference", referencePath); - } - } - - public async removeProjectReference(referencePath: string): Promise { - const references = await this.getProjectReferences(); - const libRefExists = _.some(references, r => path.normalize(r.path) === path.normalize(referencePath)); - if (libRefExists) { - await this.removeFromPropertyList("android.library.reference", referencePath); - } else { - this.$logger.error(`Could not find ${referencePath}.`); - } - } - - private async createEditor(): Promise { - return this._editor || await this.$propertiesParser.createEditor(this.filePath); - } - - private buildKeyName(key: string, index: number): string { - return `${key}.${index}`; - } - - private async getAllProjectProperties(): Promise { - return this.$propertiesParser.read(this.filePath); - } - - private createLibraryReference(referenceName: string, referencePath: string): ILibRef { - return { - idx: parseInt(referenceName.split("android.library.reference.")[1]), - key: referenceName, - path: referencePath, - adjustedPath: path.join(path.dirname(this.filePath), referencePath) - }; - } - - private async addToPropertyList(key: string, value: string): Promise { - const editor = await this.createEditor(); - let i = 1; - while (editor.get(this.buildKeyName(key, i))) { - i++; - } - - editor.set(this.buildKeyName(key, i), value); - await this.$propertiesParser.saveEditor(); - this.dirty = true; - } - - private async removeFromPropertyList(key: string, value: string): Promise { - const editor = await this.createEditor(); - const valueLowerCase = value.toLowerCase(); - let i = 1; - let currentValue: any; - while (currentValue = editor.get(this.buildKeyName(key, i))) { - if (currentValue.toLowerCase() === valueLowerCase) { - while (currentValue = editor.get(this.buildKeyName(key, i + 1))) { - editor.set(this.buildKeyName(key, i), currentValue); - i++; - } - - editor.set(this.buildKeyName(key, i)); - break; - } - - i++; - } - - await this.$propertiesParser.saveEditor(); - this.dirty = true; - } -} diff --git a/lib/services/android-project-service.ts b/lib/services/android-project-service.ts index e7c36762d3..d47626112f 100644 --- a/lib/services/android-project-service.ts +++ b/lib/services/android-project-service.ts @@ -20,7 +20,6 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject { name: "lazy", version: "^1.0.11" } ]; - private _androidProjectPropertiesManagers: IDictionary; private isAndroidStudioTemplate: boolean; constructor(private $androidEmulatorServices: Mobile.IEmulatorPlatformServices, @@ -39,7 +38,6 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject private $platformEnvironmentRequirements: IPlatformEnvironmentRequirements, private $androidResourcesMigrationService: IAndroidResourcesMigrationService) { super($fs, $projectDataService); - this._androidProjectPropertiesManagers = Object.create(null); this.isAndroidStudioTemplate = false; } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 126425193d..14929f16b0 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1452,11 +1452,6 @@ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" }, - "filesize": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.1.2.tgz", - "integrity": "sha1-jB0EdXYIY3CZmyPDLyF8TVGr8oo=" - }, "fill-range": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", @@ -4152,11 +4147,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" - }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", @@ -4605,21 +4595,6 @@ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, - "progress-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.1.1.tgz", - "integrity": "sha1-nsvxh5MsSUHVUCGRkNdN7ArEX1Q=", - "requires": { - "single-line-log": "0.3.1", - "speedometer": "0.1.4", - "through2": "0.2.3" - } - }, - "properties-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.2.3.tgz", - "integrity": "sha1-91kSVfcHq7/yJ8e1a2N9uwNzoQ8=" - }, "proxy-lib": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/proxy-lib/-/proxy-lib-0.4.0.tgz", @@ -5131,11 +5106,6 @@ } } }, - "single-line-log": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-0.3.1.tgz", - "integrity": "sha1-p61lB/IYzl3+FsS/LWWSRkGeegY=" - }, "sinon": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.2.tgz", @@ -5259,11 +5229,6 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" }, - "speedometer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=" - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -5515,38 +5480,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "through2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", - "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", - "requires": { - "readable-stream": "1.1.14", - "xtend": "2.1.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, "tiny-lr": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", @@ -6052,14 +5985,6 @@ "version": "https://github.com/telerik/node-XMLHttpRequest/tarball/master", "integrity": "sha1-gyu8L8J4DhCCCmdOlAQRCpQ0M6c=" }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "requires": { - "object-keys": "0.4.0" - } - }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", diff --git a/package.json b/package.json index 0ab413bc2c..41f2828895 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "mobile" ], "dependencies": { - "bufferpack": "0.0.6", "byline": "4.2.1", "chalk": "1.1.0", "chokidar": "1.7.0", @@ -39,9 +38,7 @@ "colors": "1.1.2", "email-validator": "1.0.4", "esprima": "2.7.0", - "filesize": "3.1.2", "gaze": "1.1.0", - "glob": "^7.0.3", "iconv-lite": "0.4.11", "inquirer": "0.9.0", "ios-device-lib": "0.4.10", @@ -63,8 +60,6 @@ "pbxproj-dom": "1.0.11", "plist": "1.1.0", "plist-merge-patch": "0.1.1", - "progress-stream": "1.1.1", - "properties-parser": "0.2.3", "proxy-lib": "0.4.0", "qr-image": "3.2.0", "request": "2.81.0", diff --git a/test/android-project-properties-manager.ts b/test/android-project-properties-manager.ts deleted file mode 100644 index 1c51a3a75b..0000000000 --- a/test/android-project-properties-manager.ts +++ /dev/null @@ -1,145 +0,0 @@ -import * as ProjectPropertiesParserLib from "../lib/common/properties-parser"; -import * as FsLib from "../lib/common/file-system"; -import * as ProjectPropertiesManagerLib from "../lib/services/android-project-properties-manager"; -import * as HostInfoLib from "../lib/common/host-info"; -import * as StaticConfigLib from "../lib/config"; -import * as ErrorsLib from "../lib/common/errors"; -import * as LoggerLib from "../lib/common/logger"; -import * as ConfigLib from "../lib/config"; -import * as OptionsLib from "../lib/options"; -import * as yok from "../lib/common/yok"; -import { SettingsService } from "../lib/common/test/unit-tests/stubs"; -import * as path from "path"; -import temp = require("temp"); -temp.track(); -import { assert } from "chai"; - -function createTestInjector(): IInjector { - const testInjector = new yok.Yok(); - testInjector.register("propertiesParser", ProjectPropertiesParserLib.PropertiesParser); - testInjector.register("fs", FsLib.FileSystem); - testInjector.register("hostInfo", HostInfoLib.HostInfo); - testInjector.register("staticConfig", StaticConfigLib.StaticConfig); - testInjector.register("errors", ErrorsLib.Errors); - testInjector.register("logger", LoggerLib.Logger); - testInjector.register("config", ConfigLib.Configuration); - testInjector.register("options", OptionsLib.Options); - testInjector.register("settingsService", SettingsService); - - return testInjector; -} - -describe("Android project properties parser tests", () => { - it("adds project reference", async () => { - const testInjector = createTestInjector(); - const fs = testInjector.resolve("fs"); - - const projectPropertiesFileContent = 'target=android-21'; - const tempFolder = temp.mkdirSync("AndroidProjectPropertiesManager"); - fs.writeFile(path.join(tempFolder, "project.properties"), projectPropertiesFileContent); - - const projectPropertiesManager: IAndroidProjectPropertiesManager = testInjector.resolve( - ProjectPropertiesManagerLib.AndroidProjectPropertiesManager, { directoryPath: tempFolder }); - await projectPropertiesManager.addProjectReference("testValue"); - - const expectedContent = 'target=android-21' + '\n' + - 'android.library.reference.1=testValue'; - const actualContent = fs.readText(path.join(tempFolder, "project.properties")); - - assert.equal(expectedContent, actualContent); - assert.equal(1, _.keys(await projectPropertiesManager.getProjectReferences()).length); - }); - - it("adds project reference if another referencence already exists in project.properties file", async () => { - const testInjector = createTestInjector(); - const fs = testInjector.resolve("fs"); - - const projectPropertiesFileContent = 'target=android-21' + '\n' + - 'android.library.reference.1=someValue'; - const tempFolder = temp.mkdirSync("AndroidProjectPropertiesManager"); - fs.writeFile(path.join(tempFolder, "project.properties"), projectPropertiesFileContent); - - const projectPropertiesManager = testInjector.resolve( - ProjectPropertiesManagerLib.AndroidProjectPropertiesManager, { directoryPath: tempFolder }); - await projectPropertiesManager.addProjectReference("testValue"); - - const expectedContent = ['target=android-21', - 'android.library.reference.1=someValue', - 'android.library.reference.2=testValue'].join('\n'); - const actualContent = fs.readText(path.join(tempFolder, "project.properties")); - - assert.equal(expectedContent, actualContent); - assert.equal(2, _.keys(await projectPropertiesManager.getProjectReferences()).length); - }); - it("adds project reference if more than one references exist in project.properties file", async () => { - const testInjector = createTestInjector(); - const fs = testInjector.resolve("fs"); - - const projectPropertiesFileContent = ['target=android-21', - 'android.library.reference.1=value1', - 'android.library.reference.2=value2', - 'android.library.reference.3=value3', - 'android.library.reference.4=value4', - 'android.library.reference.5=value5'].join('\n'); - const tempFolder = temp.mkdirSync("AndroidProjectPropertiesManager"); - fs.writeFile(path.join(tempFolder, "project.properties"), projectPropertiesFileContent); - - const projectPropertiesManager: IAndroidProjectPropertiesManager = testInjector.resolve( - ProjectPropertiesManagerLib.AndroidProjectPropertiesManager, { directoryPath: tempFolder }); - await projectPropertiesManager.addProjectReference("testValue"); - - const expectedContent = projectPropertiesFileContent + '\n' + - 'android.library.reference.6=testValue'; - - const actualContent = fs.readText(path.join(tempFolder, "project.properties")); - - assert.equal(expectedContent, actualContent); - assert.equal(6, _.keys(await projectPropertiesManager.getProjectReferences()).length); - }); - it("removes project reference if only one reference exists", async () => { - const testInjector = createTestInjector(); - const fs = testInjector.resolve("fs"); - - const projectPropertiesFileContent = 'android.library.reference.1=value1' + '\n' + - 'target=android-21'; - const tempFolder = temp.mkdirSync("AndroidProjectPropertiesManager"); - fs.writeFile(path.join(tempFolder, "project.properties"), projectPropertiesFileContent); - - const projectPropertiesManager: IAndroidProjectPropertiesManager = testInjector.resolve( - ProjectPropertiesManagerLib.AndroidProjectPropertiesManager, { directoryPath: tempFolder }); - await projectPropertiesManager.removeProjectReference("value1"); - - const expectedContent = 'target=android-21'; - const actualContent = fs.readText(path.join(tempFolder, "project.properties")); - - assert.equal(expectedContent, actualContent); - assert.equal(0, _.keys(await projectPropertiesManager.getProjectReferences()).length); - }); - it("removes project reference when another references exist before and after the specified reference", async () => { - const testInjector = createTestInjector(); - const fs = testInjector.resolve("fs"); - - const projectPropertiesFileContent = ['target=android-17', - 'android.library.reference.1=value1', - 'android.library.reference.2=value2', - 'android.library.reference.3=value3', - 'android.library.reference.4=value4', - 'android.library.reference.5=value5'].join('\n'); - const tempFolder = temp.mkdirSync("AndroidProjectPropertiesManager"); - fs.writeFile(path.join(tempFolder, "project.properties"), projectPropertiesFileContent); - - const projectPropertiesManager: IAndroidProjectPropertiesManager = testInjector.resolve( - ProjectPropertiesManagerLib.AndroidProjectPropertiesManager, { directoryPath: tempFolder }); - await projectPropertiesManager.removeProjectReference("value3"); - - const expectedContent = ['target=android-17', - 'android.library.reference.1=value1', - 'android.library.reference.2=value2', - 'android.library.reference.3=value4', - 'android.library.reference.4=value5'].join('\n') + '\n'; - const actualContent = fs.readText(path.join(tempFolder, "project.properties")); - - assert.equal(expectedContent, actualContent); - assert.equal(4, _.keys(await projectPropertiesManager.getProjectReferences()).length); - }); -});