diff --git a/lib/bootstrap.ts b/lib/bootstrap.ts index 65a957a78f..c26c2acf3f 100644 --- a/lib/bootstrap.ts +++ b/lib/bootstrap.ts @@ -18,6 +18,7 @@ $injector.require("analyticsSettingsService", "./services/analytics-settings-ser $injector.require("emulatorSettingsService", "./services/emulator-settings-service"); +$injector.require("platformCommandParameter", "./platform-command-param"); $injector.requireCommand("create", "./commands/create-project"); $injector.requireCommand("platform|*list", "./commands/list-platforms"); $injector.requireCommand("platform|add", "./commands/add-platform"); diff --git a/lib/commands/add-platform.ts b/lib/commands/add-platform.ts index 85923e452a..ad1164df3c 100644 --- a/lib/commands/add-platform.ts +++ b/lib/commands/add-platform.ts @@ -1,12 +1,28 @@ /// +"use strict"; export class AddPlatformCommand implements ICommand { - constructor(private $platformService: IPlatformService) { } + constructor(private $platformService: IPlatformService, + private $errors: IErrors) { } execute(args: string[]): IFuture { return (() => { this.$platformService.addPlatforms(args).wait(); }).future()(); } + + allowedParameters: ICommandParameter[] = []; + + canExecute(args: string[]): IFuture { + return (() => { + if(!args || args.length === 0) { + this.$errors.fail("No platform specified. Please specify a platform to add"); + } + + _.each(args, arg => this.$platformService.validatePlatform(arg)); + + return true; + }).future()(); + } } $injector.registerCommand("platform|add", AddPlatformCommand); \ No newline at end of file diff --git a/lib/commands/build.ts b/lib/commands/build.ts index d483add028..3c81042226 100644 --- a/lib/commands/build.ts +++ b/lib/commands/build.ts @@ -1,12 +1,16 @@ /// +"use strict"; export class BuildCommand implements ICommand { - constructor(private $platformService: IPlatformService) { } + constructor(private $platformService: IPlatformService, + private $platformCommandParameter: ICommandParameter) { } execute(args: string[]): IFuture { return (() => { this.$platformService.buildPlatform(args[0]).wait(); }).future()(); } + + allowedParameters = [this.$platformCommandParameter]; } $injector.registerCommand("build", BuildCommand); \ No newline at end of file diff --git a/lib/commands/create-project.ts b/lib/commands/create-project.ts index 4333a5dace..5aeb363d7f 100644 --- a/lib/commands/create-project.ts +++ b/lib/commands/create-project.ts @@ -1,7 +1,26 @@ /// +"use strict"; + +export class ProjectCommandParameter implements ICommandParameter { + constructor(private $errors: IErrors, + private $projectNameValidator: IProjectNameValidator) { } + + mandatory = true; + validate(value: string): IFuture { + return (() => { + if(!value) { + this.$errors.fail("You must specify when creating a new project."); + } + + return this.$projectNameValidator.validate(value); + }).future()(); + } +} export class CreateProjectCommand implements ICommand { - constructor(private $projectService: IProjectService) { } + constructor(private $projectService: IProjectService, + private $errors: IErrors, + private $projectNameValidator: IProjectNameValidator) { } public enableHooks = false; @@ -10,5 +29,7 @@ export class CreateProjectCommand implements ICommand { this.$projectService.createProject(args[0]).wait(); }).future()(); } + + allowedParameters = [new ProjectCommandParameter(this.$errors, this.$projectNameValidator) ] } $injector.registerCommand("create", CreateProjectCommand); diff --git a/lib/commands/deploy.ts b/lib/commands/deploy.ts index a2893c3a72..5c0d29d011 100644 --- a/lib/commands/deploy.ts +++ b/lib/commands/deploy.ts @@ -1,10 +1,14 @@ /// +"use strict"; export class DeployOnDeviceCommand implements ICommand { - constructor(private $platformService: IPlatformService) { } + constructor(private $platformService: IPlatformService, + private $platformCommandParameter: ICommandParameter) { } execute(args: string[]): IFuture { return this.$platformService.deployOnDevice(args[0]); } + + allowedParameters = [this.$platformCommandParameter]; } -$injector.registerCommand("deploy", DeployOnDeviceCommand); \ No newline at end of file +$injector.registerCommand("deploy", DeployOnDeviceCommand); diff --git a/lib/commands/emulate.ts b/lib/commands/emulate.ts index 5dc69cc936..9344392a20 100644 --- a/lib/commands/emulate.ts +++ b/lib/commands/emulate.ts @@ -1,8 +1,11 @@ /// export class EmulateCommand implements ICommand { - constructor(private $platformService: IPlatformService) { } + constructor(private $platformService: IPlatformService, + private $platformCommandParameter: ICommandParameter) { } - execute(args: string[]): IFuture { return this.$platformService.deployOnEmulator(args[0]);} + execute(args: string[]): IFuture { return this.$platformService.deployOnEmulator(args[0]); } + + allowedParameters = [this.$platformCommandParameter]; } -$injector.registerCommand("emulate", EmulateCommand); \ No newline at end of file +$injector.registerCommand("emulate", EmulateCommand); diff --git a/lib/commands/list-devices.ts b/lib/commands/list-devices.ts index ba4a548b90..c957999749 100644 --- a/lib/commands/list-devices.ts +++ b/lib/commands/list-devices.ts @@ -4,7 +4,8 @@ import util = require("util") export class ListDevicesCommand implements ICommand { constructor(private $devicesServices: Mobile.IDevicesServices, - private $logger: ILogger) { } + private $logger: ILogger, + private $stringParameter: ICommandParameter) { } execute(args: string[]): IFuture { return (() => { @@ -17,5 +18,7 @@ export class ListDevicesCommand implements ICommand { this.$devicesServices.execute(action, undefined, {allowNoDevices: true}).wait(); }).future()(); } + + allowedParameters = [this.$stringParameter]; } $injector.registerCommand("list-devices", ListDevicesCommand); diff --git a/lib/commands/list-platforms.ts b/lib/commands/list-platforms.ts index 22f261dfc4..6c73dfa08e 100644 --- a/lib/commands/list-platforms.ts +++ b/lib/commands/list-platforms.ts @@ -24,5 +24,7 @@ export class ListPlatformsCommand implements ICommand { } }).future()(); } + + allowedParameters: ICommandParameter[] = []; } $injector.registerCommand("platform|*list", ListPlatformsCommand); diff --git a/lib/commands/post-install.ts b/lib/commands/post-install.ts index d1b0dc1fbb..9e84028643 100644 --- a/lib/commands/post-install.ts +++ b/lib/commands/post-install.ts @@ -21,5 +21,7 @@ export class PostInstallCommand implements ICommand { this.$autoCompletionService.enableAutoCompletion().wait(); }).future()(); } + + public allowedParameters: ICommandParameter[] = []; } $injector.registerCommand("dev-post-install", PostInstallCommand); \ No newline at end of file diff --git a/lib/commands/prepare.ts b/lib/commands/prepare.ts index 4821ff66e9..8b1c1b012f 100644 --- a/lib/commands/prepare.ts +++ b/lib/commands/prepare.ts @@ -1,12 +1,15 @@ /// export class PrepareCommand implements ICommand { - constructor(private $platformService: IPlatformService) { } + constructor(private $platformService: IPlatformService, + private $platformCommandParameter: ICommandParameter) { } execute(args: string[]): IFuture { return (() => { this.$platformService.preparePlatform(args[0]).wait(); }).future()(); } + + allowedParameters = [this.$platformCommandParameter]; } $injector.registerCommand("prepare", PrepareCommand); diff --git a/lib/commands/remove-platform.ts b/lib/commands/remove-platform.ts index c45586470d..e7b34df76a 100644 --- a/lib/commands/remove-platform.ts +++ b/lib/commands/remove-platform.ts @@ -1,12 +1,28 @@ /// +"use strict"; export class RemovePlatformCommand implements ICommand { - constructor(private $platformService: IPlatformService) { } + constructor(private $platformService: IPlatformService, + private $errors: IErrors) { } execute(args: string[]): IFuture { return (() => { this.$platformService.removePlatforms(args).wait(); }).future()(); } + + canExecute(args: string[]): IFuture { + return (() => { + if(!args || args.length === 0) { + this.$errors.fail("No platform specified. Please specify a platform to remove"); + } + + _.each(args, arg => this.$platformService.validatePlatformInstalled(arg)); + + return true; + }).future()(); + } + + allowedParameters: ICommandParameter[] = []; } $injector.registerCommand("platform|remove", RemovePlatformCommand); \ No newline at end of file diff --git a/lib/commands/run.ts b/lib/commands/run.ts index 39292de7c5..ac3de494e3 100644 --- a/lib/commands/run.ts +++ b/lib/commands/run.ts @@ -1,12 +1,16 @@ /// +"use strict"; export class RunCommand implements ICommand { - constructor(private $platformService: IPlatformService) { } + constructor(private $platformService: IPlatformService, + private $platformCommandParameter: ICommandParameter) { } execute(args: string[]): IFuture { return (() => { this.$platformService.runPlatform(args[0]).wait(); }).future()(); } + + allowedParameters = [this.$platformCommandParameter]; } $injector.registerCommand("run", RunCommand); diff --git a/lib/commands/update-platform.ts b/lib/commands/update-platform.ts index 021b614d16..1c7dc22ae4 100644 --- a/lib/commands/update-platform.ts +++ b/lib/commands/update-platform.ts @@ -1,12 +1,28 @@ /// +"use strict"; export class UpdatePlatformCommand implements ICommand { - constructor(private $platformService: IPlatformService) { } + constructor(private $platformService: IPlatformService, + private $errors:IErrors) { } execute(args: string[]): IFuture { return (() => { this.$platformService.updatePlatforms(args).wait(); }).future()(); } + + canExecute(args: string[]): IFuture { + return (() => { + if(!args || args.length === 0) { + this.$errors.fail("No platform specified. Please specify platforms to update."); + } + + _.each(args, arg => this.$platformService.validatePlatformInstalled(arg)); + + return true; + }).future()(); + } + + allowedParameters: ICommandParameter[] = []; } $injector.registerCommand("platform|update", UpdatePlatformCommand); \ No newline at end of file diff --git a/lib/common b/lib/common index 8426225275..885bdcd12a 160000 --- a/lib/common +++ b/lib/common @@ -1 +1 @@ -Subproject commit 8426225275bc36770ea536008230a62059be3219 +Subproject commit 885bdcd12afaf3bfa82a5633c704a1c77634fb6a diff --git a/lib/definitions/platform.d.ts b/lib/definitions/platform.d.ts index 4be0764857..e60e4c0634 100644 --- a/lib/definitions/platform.d.ts +++ b/lib/definitions/platform.d.ts @@ -10,6 +10,8 @@ interface IPlatformService { buildPlatform(platform: string): IFuture; deployOnDevice(platform: string): IFuture; deployOnEmulator(platform: string): IFuture; + validatePlatformInstalled(platform: string): void; + validatePlatform(platform: string): void; } interface IPlatformData { diff --git a/lib/platform-command-param.ts b/lib/platform-command-param.ts new file mode 100644 index 0000000000..1e5389d7fc --- /dev/null +++ b/lib/platform-command-param.ts @@ -0,0 +1,14 @@ +/// +"use strict"; + +export class PlatformCommandParameter implements ICommandParameter { + constructor(private $platformService: IPlatformService) { } + mandatory = true; + validate(value: string): IFuture { + return (() => { + this.$platformService.validatePlatformInstalled(value); + return true; + }).future()(); + } +} +$injector.register("platformCommandParameter", PlatformCommandParameter); \ No newline at end of file diff --git a/lib/services/platform-service.ts b/lib/services/platform-service.ts index 0c74c5b82c..6598df3a92 100644 --- a/lib/services/platform-service.ts +++ b/lib/services/platform-service.ts @@ -21,10 +21,6 @@ export class PlatformService implements IPlatformService { public addPlatforms(platforms: string[]): IFuture { return (() => { - if(!platforms || platforms.length === 0) { - this.$errors.fail("No platform specified. Please specify a platform to add"); - } - var platformsDir = this.$projectData.platformsDir; this.$fs.ensureDirectoryExists(platformsDir).wait(); @@ -136,7 +132,6 @@ export class PlatformService implements IPlatformService { public preparePlatform(platform: string): IFuture { return (() => { - this.validatePlatformInstalled(platform); platform = platform.toLowerCase(); var platformData = this.$platformsData.getPlatformData(platform); @@ -166,7 +161,6 @@ export class PlatformService implements IPlatformService { public buildPlatform(platform: string): IFuture { return (() => { - this.validatePlatformInstalled(platform); platform = platform.toLowerCase(); var platformData = this.$platformsData.getPlatformData(platform); @@ -177,7 +171,6 @@ export class PlatformService implements IPlatformService { public runPlatform(platform: string): IFuture { return (() => { - this.validatePlatformInstalled(platform); platform = platform.toLowerCase(); this.preparePlatform(platform).wait(); @@ -191,10 +184,6 @@ export class PlatformService implements IPlatformService { public removePlatforms(platforms: string[]): IFuture { return (() => { - if(!platforms || platforms.length === 0) { - this.$errors.fail("No platform specified. Please specify a platform to remove"); - } - _.each(platforms, platform => { this.validatePlatformInstalled(platform); @@ -207,10 +196,6 @@ export class PlatformService implements IPlatformService { public updatePlatforms(platforms: string[]): IFuture { return (() => { - if(!platforms || platforms.length === 0) { - this.$errors.fail("No platform specified. Please specify a platform to remove"); - } - _.each(platforms, platform => { var parts = platform.split("@"); platform = parts[0].toLowerCase(); @@ -224,7 +209,6 @@ export class PlatformService implements IPlatformService { public deployOnDevice(platform: string): IFuture { return (() => { - this.validatePlatformInstalled(platform); platform = platform.toLowerCase(); var platformData = this.$platformsData.getPlatformData(platform); @@ -267,7 +251,7 @@ export class PlatformService implements IPlatformService { }).future()(); } - private validatePlatform(platform: string): void { + public validatePlatform(platform: string): void { if(!platform) { this.$errors.fail("No platform specified.") } @@ -283,7 +267,7 @@ export class PlatformService implements IPlatformService { } } - private validatePlatformInstalled(platform: string): void { + public validatePlatformInstalled(platform: string): void { this.validatePlatform(platform); if (!this.isPlatformInstalled(platform).wait()) { diff --git a/test/platform-commands.ts b/test/platform-commands.ts new file mode 100644 index 0000000000..b23fcd75f8 --- /dev/null +++ b/test/platform-commands.ts @@ -0,0 +1,297 @@ +/// +"use strict"; + +import yok = require('../lib/common/yok'); +import stubs = require('./stubs'); +import PlatformAddCommandLib = require("../lib/commands/add-platform"); +import PlatformRemoveCommandLib = require("../lib/commands/remove-platform"); +import PlatformUpdateCommandLib = require("../lib/commands/update-platform"); +import PlatformServiceLib = require('../lib/services/platform-service'); +import StaticConfigLib = require("../lib/config"); +import CommandsServiceLib = require("../lib/common/services/commands-service"); +import path = require("path"); +import Future = require("fibers/future"); +var assert = require("chai").assert; +var options: any = require("./../lib/options"); +var isCommandExecuted = true; + +class PlatformData implements IPlatformData { + frameworkPackageName = "tns-android"; + normalizedPlatformName = "Android"; + platformProjectService: IPlatformProjectService = null; + emulatorServices: Mobile.IEmulatorPlatformServices = null; + projectRoot = ""; + deviceBuildOutputPath = ""; + validPackageNamesForDevice: string[] = []; + frameworkFilesExtensions = [".jar", ".dat"]; +} + +class ErrorsNoFailStub implements IErrors { + fail(formatStr: string, ...args: any[]): void; + fail(opts: { formatStr?: string; errorCode?: number; suppressCommandHelp?: boolean }, ...args: any[]): void; + + fail(...args: any[]) { throw new Error(); } + + beginCommand(action: () => IFuture, printHelpCommand: () => IFuture): IFuture { + return (() => { + try { + var result = action().wait(); + } catch(ex) { + return false; + } + + return result; + }).future()(); + } + + verifyHeap(message: string): void { } +} + +class PlatformsData implements IPlatformsData { + platformsNames = ["android", "ios"]; + getPlatformData(platform: string): IPlatformData { + if(_.contains(this.platformsNames, platform)) { + return new PlatformData(); + } + + return null; + } +} + +function createTestInjector() { + var testInjector = new yok.Yok(); + + testInjector.register("injector", testInjector); + testInjector.register("hooksService", stubs.HooksServiceStub); + testInjector.register("staticConfig", StaticConfigLib.StaticConfig); + testInjector.register('platformService', PlatformServiceLib.PlatformService); + testInjector.register('errors', ErrorsNoFailStub); + testInjector.register('logger', stubs.LoggerStub); + testInjector.register('npm', stubs.NPMStub); + testInjector.register('projectData', stubs.ProjectDataStub); + testInjector.register('platformsData', PlatformsData); + testInjector.register('devicesServices', {}); + testInjector.register('projectDataService', stubs.ProjectDataService); + testInjector.register('prompter', {}); + testInjector.register('commands-service', CommandsServiceLib.CommandsService); + testInjector.registerCommand("platform|add", PlatformAddCommandLib.AddPlatformCommand); + testInjector.registerCommand("platform|remove", PlatformRemoveCommandLib.RemovePlatformCommand); + testInjector.registerCommand("platform|update", PlatformUpdateCommandLib.UpdatePlatformCommand); + + + return testInjector; +} + +describe('Platform Service Tests', () => { + var platformService: IPlatformService, testInjector: IInjector; + var commandsService: ICommandsService; + beforeEach(() => { + testInjector = createTestInjector(); + testInjector.register("fs", stubs.FileSystemStub); + commandsService = testInjector.resolve("commands-service"); + platformService = testInjector.resolve("platformService"); + }); + + describe("platform commands tests", () => { + describe("#AddPlatformCommand", () => { + it("is not executed when platform is not passed", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|add", []).wait(); + assert.isFalse(isCommandExecuted); + }); + + it("is not executed when platform is not valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|add", ["invalidPlatform"]).wait(); + assert.isFalse(isCommandExecuted); + }); + + it("is executed when platform is valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|add", ["android"]).wait(); + assert.isTrue(isCommandExecuted); + }); + + it("is executed when all platforms are valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|add", ["android", "ios"]).wait(); + assert.isTrue(isCommandExecuted); + }); + + it("is not executed when at least one platform is not valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|add", ["ios", "invalid"]).wait(); + assert.isFalse(isCommandExecuted); + }); + }); + + describe("#RemovePlatformCommand", () => { + it("is not executed when platform is not passed", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|remove", []).wait(); + assert.isFalse(isCommandExecuted); + }); + + it("is not executed when platform is not valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|remove", ["invalidPlatform"]).wait(); + assert.isFalse(isCommandExecuted); + }); + + it("is executed when platform is valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|remove", ["android"]).wait(); + assert.isTrue(isCommandExecuted); + }); + + it("is executed when all platforms are valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|remove", ["android", "ios"]).wait(); + assert.isTrue(isCommandExecuted); + }); + + it("is not executed when at least one platform is not valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|remove", ["ios", "invalid"]).wait(); + assert.isFalse(isCommandExecuted); + }); + }); + + describe("#UpdatePlatformCommand", () => { + it("is not executed when platform is not passed", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|update", []).wait(); + assert.isFalse(isCommandExecuted); + }); + + it("is not executed when platform is not valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|update", ["invalidPlatform"]).wait(); + assert.isFalse(isCommandExecuted); + }); + + it("is executed when platform is valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|update", ["android"]).wait(); + assert.isTrue(isCommandExecuted); + }); + + it("is executed when all platforms are valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|update", ["android", "ios"]).wait(); + assert.isTrue(isCommandExecuted); + }); + + it("is not executed when at least one platform is not valid", () => { + isCommandExecuted = false; + commandsService.executeCommandUnchecked = (): IFuture => { + return (() => { + isCommandExecuted = true; + return false; + }).future()(); + } + + commandsService.tryExecuteCommand("platform|update", ["ios", "invalid"]).wait(); + assert.isFalse(isCommandExecuted); + }); + }); + }); +}); \ No newline at end of file diff --git a/test/platform-service.ts b/test/platform-service.ts index 324d6de6a4..c483e4e395 100644 --- a/test/platform-service.ts +++ b/test/platform-service.ts @@ -51,14 +51,6 @@ describe('Platform Service Tests', () => { describe("add platform unit tests", () => { describe("#add platform()", () => { - it("should fail if platform is null or undefined", () => { - (() => platformService.addPlatforms(null).wait()).should.throw(); - (() => platformService.addPlatforms(undefined).wait()).should.throw(); - }); - it("should fail if platform not supported", () => { - (() => platformService.addPlatforms(["fdhf"]).wait()).should.throw(); - (() => platformService.addPlatforms(["test"]).wait()).should.throw(); - }); it("should not fail if platform is not normalized", () => { var fs = testInjector.resolve("fs"); fs.exists = () => Future.fromResult(false); @@ -134,13 +126,8 @@ describe('Platform Service Tests', () => { }); describe("remove platform unit tests", () => { - it("should fail if platform null or undefined", () => { - (() => platformService.removePlatforms(null).wait()).should.throw(); - (() => platformService.removePlatforms(undefined).wait()).should.throw(); - }); it("should fail when platforms are not added", () => { testInjector.resolve("fs").exists = () => Future.fromResult(false); - (() => platformService.removePlatforms(["android"]).wait()).should.throw(); (() => platformService.removePlatforms(["ios"]).wait()).should.throw(); }); @@ -160,25 +147,8 @@ describe('Platform Service Tests', () => { }); describe("update Platform", () => { - - describe('#updatePlatforms()', function(){ - it('should fail when no services provided', () => { - (() => platformService.updatePlatforms([]).wait()).should.throw(); - }); - }); - describe("#updatePlatform(platform)", () => { - it ("should fail if platform null or undefined", () => { - (() => platformService.updatePlatforms(null).wait()).should.throw(); - (() => platformService.updatePlatforms(undefined).wait()).should.throw(); - }); - - it ("should fail if platform not supported", () => { - (() => platformService.updatePlatforms(["unsupported"]).wait()).should.throw(); - (() => platformService.updatePlatforms(["aaa"]).wait()).should.throw(); - }); - - it ("should fail when the versions are the same", () => { + it("should fail when the versions are the same", () => { var npm: INodePackageManager = testInjector.resolve("npm"); npm.getLatestVersion = () => (() => "0.2.0").future()(); npm.getCacheRootPath = () => (() => "").future()(); diff --git a/test/stubs.ts b/test/stubs.ts index 0f4f89b0aa..dc8fa0aef8 100644 --- a/test/stubs.ts +++ b/test/stubs.ts @@ -255,4 +255,13 @@ export class ProjectTemplatesService implements IProjectTemplatesService { } } - +export class HooksServiceStub implements IHooksService { + initialize(commandName: string): void { + } + executeBeforeHooks(): IFuture { + return (() => { }).future()(); + } + executeAfterHooks(): IFuture { + return (() => { }).future()(); + } +}