From 5425ca97f91790eaf8cd0863177a91dd9103b9bc Mon Sep 17 00:00:00 2001 From: Dimitar Kerezov Date: Thu, 9 Mar 2017 11:20:23 +0200 Subject: [PATCH 1/2] Respect runtime version written in package json Instead of always installing the latest runtime version, respect the one written in `package.json` `nativescript` key. --- lib/constants.ts | 1 + lib/services/platform-service.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lib/constants.ts b/lib/constants.ts index dfa44d3b3a..93b1aa85b1 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -68,3 +68,4 @@ export const ItunesConnectApplicationTypes = new ItunesConnectApplicationTypesCl export const ANGULAR_NAME = "angular"; export const TYPESCRIPT_NAME = "typescript"; export const BUILD_OUTPUT_EVENT_NAME = "buildOutput"; +export const VERSION_STRING = "version"; diff --git a/lib/services/platform-service.ts b/lib/services/platform-service.ts index 8b807f1c15..1cf0f89c44 100644 --- a/lib/services/platform-service.ts +++ b/lib/services/platform-service.ts @@ -67,6 +67,10 @@ export class PlatformService extends EventEmitter implements IPlatformService { } let platformData = this.$platformsData.getPlatformData(platform, projectData); + let currentPlatformData: any = this.$projectDataService.getNSValue(projectData.projectDir, platformData.frameworkPackageName); + if (currentPlatformData && currentPlatformData[constants.VERSION_STRING]) { + version = currentPlatformData[constants.VERSION_STRING]; + } // Copy platform specific files in platforms dir let platformProjectService = platformData.platformProjectService; From ef24226fec74792034b601140aa258f03e74843f Mon Sep 17 00:00:00 2001 From: Dimitar Kerezov Date: Thu, 9 Mar 2017 12:21:18 +0200 Subject: [PATCH 2/2] Add tests --- test/platform-service.ts | 42 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/test/platform-service.ts b/test/platform-service.ts index 92938e593f..4b526e2023 100644 --- a/test/platform-service.ts +++ b/test/platform-service.ts @@ -2,6 +2,7 @@ import * as yok from "../lib/common/yok"; import * as stubs from "./stubs"; import * as PlatformServiceLib from "../lib/services/platform-service"; import * as StaticConfigLib from "../lib/config"; +import { VERSION_STRING } from "../lib/constants"; import * as fsLib from "../lib/common/file-system"; import * as optionsLib from "../lib/options"; import * as hostInfoLib from "../lib/common/host-info"; @@ -129,6 +130,45 @@ describe('Platform Service Tests', () => { assert.equal(errorMessage, err.message); } }); + it("should respect platform version in package.json's nativescript key", async () => { + const versionString = "2.5.0"; + let fs = testInjector.resolve("fs"); + fs.exists = () => false; + + let nsValueObject: any = {}; + nsValueObject[VERSION_STRING] = versionString; + let projectDataService = testInjector.resolve("projectDataService"); + projectDataService.getNSValue = () => nsValueObject; + + let npmInstallationManager = testInjector.resolve("npmInstallationManager"); + npmInstallationManager.install = (packageName: string, packageDir: string, options: INpmInstallOptions) => { + assert.deepEqual(options.version, versionString); + return ""; + }; + + let projectData: IProjectData = testInjector.resolve("projectData"); + + await platformService.addPlatforms(["android"], "", projectData, null); + await platformService.addPlatforms(["ios"], "", projectData, null); + }); + it("should install latest platform if no information found in package.json's nativescript key", async () => { + let fs = testInjector.resolve("fs"); + fs.exists = () => false; + + let projectDataService = testInjector.resolve("projectDataService"); + projectDataService.getNSValue = (): any => null; + + let npmInstallationManager = testInjector.resolve("npmInstallationManager"); + npmInstallationManager.install = (packageName: string, packageDir: string, options: INpmInstallOptions) => { + assert.deepEqual(options.version, undefined); + return ""; + }; + + let projectData: IProjectData = testInjector.resolve("projectData"); + + await platformService.addPlatforms(["android"], "", projectData, null); + await platformService.addPlatforms(["ios"], "", projectData, null); + }); }); describe("#add platform(ios)", () => { it("should call validate method", async () => { @@ -173,7 +213,7 @@ describe('Platform Service Tests', () => { }); describe("remove platform unit tests", () => { - it("should fail when platforms are not added", async () => { + it("should fail when platforms are not added", async () => { const ExpectedErrorsCaught = 2; let errorsCaught = 0; let projectData: IProjectData = testInjector.resolve("projectData");