UNPKG

ember-cli-ajh

Version:

Command line tool for developing ambitious ember.js apps

1,253 lines (1,234 loc) 50 kB
/*jshint multistr: true */ 'use strict'; var chai = require('chai'); var chaiString = require('chai-string'); var expect = chai.expect; var EOL = require('os').EOL; var processHelpString = require('../helpers/process-help-string'); var convertToJson = require('../helpers/convert-help-output-to-json'); var commandOptions = require('../factories/command-options'); var HelpCommand = require('../../lib/commands/help'); var requireAsHash = require('../../lib/utilities/require-as-hash'); var Command = require('../../lib/models/command'); var commands = requireAsHash('../../lib/commands/*.js', Command); chai.use(chaiString); describe('Acceptance: ember help', function() { var options, command; beforeEach(function() { options = commandOptions({ commands: commands, project: { isEmberCLIProject: function() { return true; }, blueprintLookupPaths: function() { return []; } } }); command = new HelpCommand(options); }); it('works', function() { command.run(options, []); var output = options.ui.output; var testString = processHelpString('\ Usage: ember \u001b[33m<command (Default: help)>\u001b[39m' + EOL + '\ ' + EOL + '\ Available commands in ember-cli:' + EOL + '\ ' + EOL + '\ ember addon \u001b[33m<addon-name>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ Generates a new folder structure for building an addon, complete with test harness.' + EOL + '\ \u001b[36m--dry-run\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -d\u001b[39m' + EOL + '\ \u001b[36m--verbose\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -v\u001b[39m' + EOL + '\ \u001b[36m--blueprint\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: addon)\u001b[39m' + EOL + '\ \u001b[90maliases: -b <value>\u001b[39m' + EOL + '\ \u001b[36m--skip-npm\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -sn\u001b[39m' + EOL + '\ \u001b[36m--skip-bower\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -sb\u001b[39m' + EOL + '\ \u001b[36m--skip-git\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -sg\u001b[39m' + EOL + '\ ' + EOL + '\ ember build \u001b[36m<options...>\u001b[39m' + EOL + '\ Builds your app and places it into the output path (dist/ by default).' + EOL + '\ \u001b[90maliases: b\u001b[39m' + EOL + '\ \u001b[36m--environment\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: development)\u001b[39m' + EOL + '\ \u001b[90maliases: -e <value>, -dev (--environment=development), -prod (--environment=production)\u001b[39m' + EOL + '\ \u001b[36m--output-path\u001b[39m \u001b[36m(Path)\u001b[39m \u001b[36m(Default: dist/)\u001b[39m' + EOL + '\ \u001b[90maliases: -o <value>\u001b[39m' + EOL + '\ \u001b[36m--watch\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -w\u001b[39m' + EOL + '\ \u001b[36m--watcher\u001b[39m \u001b[36m(String)\u001b[39m' + EOL + '\ ' + EOL + '\ ember destroy \u001b[33m<blueprint>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ Destroys code generated by `generate` command.' + EOL + '\ \u001b[90maliases: d\u001b[39m' + EOL + '\ \u001b[36m--dry-run\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -d\u001b[39m' + EOL + '\ \u001b[36m--verbose\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -v\u001b[39m' + EOL + '\ \u001b[36m--pod\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -p\u001b[39m' + EOL + '\ \u001b[36m--classic\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -c\u001b[39m' + EOL + '\ \u001b[36m--dummy\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -dum, -id\u001b[39m' + EOL + '\ \u001b[36m--in-repo-addon\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: null)\u001b[39m' + EOL + '\ \u001b[90maliases: -in-repo <value>, -ir <value>\u001b[39m' + EOL + '\ ' + EOL + '\ ember generate \u001b[33m<blueprint>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ Generates new code from blueprints.' + EOL + '\ \u001b[90maliases: g\u001b[39m' + EOL + '\ \u001b[36m--dry-run\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -d\u001b[39m' + EOL + '\ \u001b[36m--verbose\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -v\u001b[39m' + EOL + '\ \u001b[36m--pod\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -p\u001b[39m' + EOL + '\ \u001b[36m--classic\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -c\u001b[39m' + EOL + '\ \u001b[36m--dummy\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -dum, -id\u001b[39m' + EOL + '\ \u001b[36m--in-repo-addon\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: null)\u001b[39m' + EOL + '\ \u001b[90maliases: -in-repo <value>, -ir <value>\u001b[39m' + EOL + '\ ' + EOL + '\ ember help \u001b[33m<command-name (Default: all)>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ Outputs the usage instructions for all commands or the provided command' + EOL + '\ \u001b[90maliases: h, --help, -h\u001b[39m' + EOL + '\ \u001b[36m--verbose\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -v\u001b[39m' + EOL + '\ \u001b[36m--json\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ ' + EOL + '\ ember init \u001b[33m<glob-pattern>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ Creates a new ember-cli project in the current folder.' + EOL + '\ \u001b[90maliases: i\u001b[39m' + EOL + '\ \u001b[36m--dry-run\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -d\u001b[39m' + EOL + '\ \u001b[36m--verbose\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -v\u001b[39m' + EOL + '\ \u001b[36m--blueprint\u001b[39m \u001b[36m(String)\u001b[39m' + EOL + '\ \u001b[90maliases: -b <value>\u001b[39m' + EOL + '\ \u001b[36m--skip-npm\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -sn\u001b[39m' + EOL + '\ \u001b[36m--skip-bower\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -sb\u001b[39m' + EOL + '\ \u001b[36m--name\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: )\u001b[39m' + EOL + '\ \u001b[90maliases: -n <value>\u001b[39m' + EOL + '\ ' + EOL + '\ ember install \u001b[33m<addon-name>\u001b[39m' + EOL + '\ Installs an ember-cli addon from npm.' + EOL + '\ ' + EOL + '\ ember new \u001b[33m<app-name>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ Creates a new directory and runs \u001b[32member init\u001b[39m in it.' + EOL + '\ \u001b[36m--dry-run\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -d\u001b[39m' + EOL + '\ \u001b[36m--verbose\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -v\u001b[39m' + EOL + '\ \u001b[36m--blueprint\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: app)\u001b[39m' + EOL + '\ \u001b[90maliases: -b <value>\u001b[39m' + EOL + '\ \u001b[36m--skip-npm\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -sn\u001b[39m' + EOL + '\ \u001b[36m--skip-bower\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -sb\u001b[39m' + EOL + '\ \u001b[36m--skip-git\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -sg\u001b[39m' + EOL + '\ \u001b[36m--directory\u001b[39m \u001b[36m(String)\u001b[39m' + EOL + '\ \u001b[90maliases: -dir <value>\u001b[39m' + EOL + '\ ' + EOL + '\ ember serve \u001b[36m<options...>\u001b[39m' + EOL + '\ Builds and serves your app, rebuilding on file changes.' + EOL + '\ \u001b[90maliases: server, s\u001b[39m' + EOL + '\ \u001b[36m--port\u001b[39m \u001b[36m(Number)\u001b[39m \u001b[36m(Default: 4200)\u001b[39m' + EOL + '\ \u001b[90maliases: -p <value>\u001b[39m' + EOL + '\ \u001b[36m--host\u001b[39m \u001b[36m(String)\u001b[39m Listens on all interfaces by default' + EOL + '\ \u001b[90maliases: -H <value>\u001b[39m' + EOL + '\ \u001b[36m--proxy\u001b[39m \u001b[36m(String)\u001b[39m' + EOL + '\ \u001b[90maliases: -pr <value>, -pxy <value>\u001b[39m' + EOL + '\ \u001b[36m--insecure-proxy\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m Set false to proxy self-signed SSL certificates' + EOL + '\ \u001b[90maliases: -inspr\u001b[39m' + EOL + '\ \u001b[36m--watcher\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: events)\u001b[39m' + EOL + '\ \u001b[90maliases: -w <value>\u001b[39m' + EOL + '\ \u001b[36m--live-reload\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: true)\u001b[39m' + EOL + '\ \u001b[90maliases: -lr\u001b[39m' + EOL + '\ \u001b[36m--live-reload-host\u001b[39m \u001b[36m(String)\u001b[39m Defaults to host' + EOL + '\ \u001b[90maliases: -lrh <value>\u001b[39m' + EOL + '\ \u001b[36m--live-reload-port\u001b[39m \u001b[36m(Number)\u001b[39m (Defaults to port number within [49152...65535])' + EOL + '\ \u001b[90maliases: -lrp <value>\u001b[39m' + EOL + '\ \u001b[36m--environment\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: development)\u001b[39m' + EOL + '\ \u001b[90maliases: -e <value>, -dev (--environment=development), -prod (--environment=production)\u001b[39m' + EOL + '\ \u001b[36m--output-path\u001b[39m \u001b[36m(Path)\u001b[39m \u001b[36m(Default: dist/)\u001b[39m' + EOL + '\ \u001b[90maliases: -op <value>, -out <value>\u001b[39m' + EOL + '\ \u001b[36m--ssl\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[36m--ssl-key\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: ssl/server.key)\u001b[39m' + EOL + '\ \u001b[36m--ssl-cert\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: ssl/server.crt)\u001b[39m' + EOL + '\ ' + EOL + '\ ember test \u001b[36m<options...>\u001b[39m' + EOL + '\ Runs your app\'s test suite.' + EOL + '\ \u001b[90maliases: t\u001b[39m' + EOL + '\ \u001b[36m--environment\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: test)\u001b[39m' + EOL + '\ \u001b[90maliases: -e <value>\u001b[39m' + EOL + '\ \u001b[36m--config-file\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: ./testem.json)\u001b[39m' + EOL + '\ \u001b[90maliases: -c <value>, -cf <value>\u001b[39m' + EOL + '\ \u001b[36m--server\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[90maliases: -s\u001b[39m' + EOL + '\ \u001b[36m--host\u001b[39m \u001b[36m(String)\u001b[39m' + EOL + '\ \u001b[90maliases: -H <value>\u001b[39m' + EOL + '\ \u001b[36m--test-port\u001b[39m \u001b[36m(Number)\u001b[39m \u001b[36m(Default: 7357)\u001b[39m The test port to use when running with --server.' + EOL + '\ \u001b[90maliases: -tp <value>\u001b[39m' + EOL + '\ \u001b[36m--filter\u001b[39m \u001b[36m(String)\u001b[39m A string to filter tests to run' + EOL + '\ \u001b[90maliases: -f <value>\u001b[39m' + EOL + '\ \u001b[36m--module\u001b[39m \u001b[36m(String)\u001b[39m The name of a test module to run' + EOL + '\ \u001b[90maliases: -m <value>\u001b[39m' + EOL + '\ \u001b[36m--watcher\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: events)\u001b[39m' + EOL + '\ \u001b[90maliases: -w <value>\u001b[39m' + EOL + '\ \u001b[36m--launch\u001b[39m \u001b[36m(String)\u001b[39m \u001b[36m(Default: false)\u001b[39m A comma separated list of browsers to launch for tests.' + EOL + '\ \u001b[36m--reporter\u001b[39m \u001b[36m(String)\u001b[39m Test reporter to use [tap|dot|xunit]' + EOL + '\ \u001b[90maliases: -r <value>\u001b[39m' + EOL + '\ \u001b[36m--test-page\u001b[39m \u001b[36m(String)\u001b[39m Test page to invoke' + EOL + '\ \u001b[36m--path\u001b[39m \u001b[36m(String)\u001b[39m Path to a build to run tests against.' + EOL + '\ \u001b[36m--query\u001b[39m \u001b[36m(String)\u001b[39m A query string to append to the test page URL.' + EOL + '\ ' + EOL + '\ ember version \u001b[36m<options...>\u001b[39m' + EOL + '\ outputs ember-cli version' + EOL + '\ \u001b[90maliases: v, --version, -v\u001b[39m' + EOL + '\ \u001b[36m--verbose\u001b[39m \u001b[36m(Boolean)\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ ' + EOL); expect(output).to.equal(testString); }); it('works json', function() { options.json = true; command.run(options, []); var json = convertToJson(options.ui.output); expect(json).to.deep.equal({ name: 'ember', description: null, aliases: [], works: 'insideProject', availableOptions: [], anonymousOptions: ['<command (Default: help)>'], commands: [ { name: 'addon', description: 'Generates a new folder structure for building an addon, complete with test harness.', aliases: [], works: 'outsideProject', availableOptions: [ { name: 'dry-run', default: false, aliases: ['d'], key: 'dryRun', required: false }, { name: 'verbose', default: false, aliases: ['v'], key: 'verbose', required: false }, { name: 'blueprint', default: 'addon', aliases: ['b'], key: 'blueprint', required: false }, { name: 'skip-npm', default: false, aliases: ['sn'], key: 'skipNpm', required: false }, { name: 'skip-bower', default: false, aliases: ['sb'], key: 'skipBower', required: false }, { name: 'skip-git', default: false, aliases: ['sg'], key: 'skipGit', required: false } ], anonymousOptions: ['<addon-name>'] }, { name: 'build', description: 'Builds your app and places it into the output path (dist/ by default).', aliases: ['b'], works: 'insideProject', availableOptions: [ { name: 'environment', default: 'development', aliases: [ 'e', { dev: 'development' }, { prod: 'production' } ], key: 'environment', required: false }, { name: 'output-path', type: 'path', default: 'dist/', aliases: ['o'], key: 'outputPath', required: false }, { name: 'watch', default: false, aliases: ['w'], key: 'watch', required: false }, { name: 'watcher', key: 'watcher', required: false } ], anonymousOptions: [] }, { name: 'destroy', description: 'Destroys code generated by `generate` command.', aliases: ['d'], works: 'insideProject', availableOptions: [ { name: 'dry-run', default: false, aliases: ['d'], key: 'dryRun', required: false }, { name: 'verbose', default: false, aliases: ['v'], key: 'verbose', required: false }, { name: 'pod', default: false, aliases: ['p'], key: 'pod', required: false }, { name: 'classic', default: false, aliases: ['c'], key: 'classic', required: false }, { name: 'dummy', default: false, aliases: ['dum', 'id'], key: 'dummy', required: false }, { name: 'in-repo-addon', default: null, aliases: ['in-repo', 'ir'], key: 'inRepoAddon', required: false } ], anonymousOptions: ['<blueprint>'] }, { name: 'generate', description: 'Generates new code from blueprints.', aliases: ['g'], works: 'insideProject', availableOptions: [ { name: 'dry-run', default: false, aliases: ['d'], key: 'dryRun', required: false }, { name: 'verbose', default: false, aliases: ['v'], key: 'verbose', required: false }, { name: 'pod', default: false, aliases: ['p'], key: 'pod', required: false }, { name: 'classic', default: false, aliases: ['c'], key: 'classic', required: false }, { name: 'dummy', default: false, aliases: ['dum', 'id'], key: 'dummy', required: false }, { name: 'in-repo-addon', default: null, aliases: ['in-repo', 'ir'], key: 'inRepoAddon', required: false } ], anonymousOptions: ['<blueprint>'], availableBlueprints: [ { 'ember-cli': [ { name: 'acceptance-test', description: 'Generates an acceptance test for a feature.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'adapter', description: 'Generates an ember-data adapter.', availableOptions: [ { name: 'base-class', type: 'String', key: 'baseClass', required: false } ], anonymousOptions: ['name'], overridden: false }, { name: 'adapter-test', description: 'Generates an ember-data adapter unit test', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'addon', description: 'The default blueprint for ember-cli addons.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'addon-import', description: 'Generates an import wrapper.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'app', description: 'The default blueprint for ember-cli projects.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'blueprint', description: 'Generates a blueprint and definition.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'component', description: 'Generates a component. Name must contain a hyphen.', availableOptions: [ { name: 'path', type: 'String', default: 'components', aliases: [ { 'no-path': '' } ], key: 'path', required: false } ], anonymousOptions: ['name'], overridden: false }, { name: 'component-addon', description: 'Generates a component. Name must contain a hyphen.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'component-test', description: 'Generates a component integration or unit test.', availableOptions: [ { name: 'test-type', type: ['integration', 'unit'], default: 'integration', aliases: [ { i: 'integration' }, { u: 'unit' }, { integration: 'integration' }, { unit: 'unit' } ], key: 'testType', required: false } ], anonymousOptions: ['name'], overridden: false }, { name: 'controller', description: 'Generates a controller.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'controller-test', description: 'Generates a controller unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'helper', description: 'Generates a helper function.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'helper-addon', description: 'Generates an import wrapper.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'helper-test', description: 'Generates a helper unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'http-mock', description: 'Generates a mock api endpoint in /api prefix.', availableOptions: [], anonymousOptions: ['endpoint-path'], overridden: false }, { name: 'http-proxy', description: 'Generates a relative proxy to another server.', availableOptions: [], anonymousOptions: ['local-path', 'remote-url'], overridden: false }, { name: 'in-repo-addon', description: 'The blueprint for addon in repo ember-cli addons.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'initializer', description: 'Generates an initializer.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'initializer-addon', description: 'Generates an import wrapper.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'initializer-test', description: 'Generates an initializer unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'lib', description: 'Generates a lib directory for in-repo addons.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'mixin', description: 'Generates a mixin.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'mixin-test', description: 'Generates a mixin unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'model', description: 'Generates an ember-data model.', availableOptions: [], anonymousOptions: ['name', 'attr:type'], overridden: false }, { name: 'model-test', description: 'Generates a model unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'resource', description: 'Generates a model and route.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'route', description: 'Generates a route and a template, and registers the route with the router.', availableOptions: [ { name: 'path', type: 'String', default: '', key: 'path', required: false }, { name: 'skip-router', type: 'Boolean', default: false, key: 'skipRouter', required: false }, { name: 'reset-namespace', type: 'Boolean', key: 'resetNamespace', required: false } ], anonymousOptions: ['name'], overridden: false }, { name: 'route-addon', description: 'Generates import wrappers for a route and its template.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'route-test', description: 'Generates a route unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'serializer', description: 'Generates an ember-data serializer.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'serializer-test', description: 'Generates a serializer unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'server', description: 'Generates a server directory for mocks and proxies.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'service', description: 'Generates a service.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'service-test', description: 'Generates a service unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'template', description: 'Generates a template.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'test-helper', description: 'Generates a test helper.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'transform', description: 'Generates an ember-data value transform.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'transform-test', description: 'Generates a transform unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'util', description: 'Generates a simple utility module/function.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'util-test', description: 'Generates a util unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'vendor-shim', description: 'Generates an ES6 module shim for global libraries.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'view', description: 'Generates a view subclass.', availableOptions: [], anonymousOptions: ['name'], overridden: false }, { name: 'view-test', description: 'Generates a view unit test.', availableOptions: [], anonymousOptions: ['name'], overridden: false } ] } ] }, { name: 'help', description: 'Outputs the usage instructions for all commands or the provided command', aliases: [null, 'h', '--help', '-h'], works: 'everywhere', availableOptions: [ { name: 'verbose', default: false, aliases: ['v'], key: 'verbose', required: false }, { name: 'json', default: false, key: 'json', required: false } ], anonymousOptions: ['<command-name (Default: all)>'] }, { name: 'init', description: 'Creates a new ember-cli project in the current folder.', aliases: ['i'], works: 'everywhere', availableOptions: [ { name: 'dry-run', default: false, aliases: ['d'], key: 'dryRun', required: false }, { name: 'verbose', default: false, aliases: ['v'], key: 'verbose', required: false }, { name: 'blueprint', aliases: ['b'], key: 'blueprint', required: false }, { name: 'skip-npm', default: false, aliases: ['sn'], key: 'skipNpm', required: false }, { name: 'skip-bower', default: false, aliases: ['sb'], key: 'skipBower', required: false }, { name: 'name', default: '', aliases: ['n'], key: 'name', required: false } ], anonymousOptions: ['<glob-pattern>'] }, { name: 'install', description: 'Installs an ember-cli addon from npm.', aliases: [], works: 'insideProject', availableOptions: [], anonymousOptions: ['<addon-name>'] }, { name: 'new', description: processHelpString('Creates a new directory and runs \u001b[32member init\u001b[39m in it.'), aliases: [], works: 'outsideProject', availableOptions: [ { name: 'dry-run', default: false, aliases: ['d'], key: 'dryRun', required: false }, { name: 'verbose', default: false, aliases: ['v'], key: 'verbose', required: false }, { name: 'blueprint', default: 'app', aliases: ['b'], key: 'blueprint', required: false }, { name: 'skip-npm', default: false, aliases: ['sn'], key: 'skipNpm', required: false }, { name: 'skip-bower', default: false, aliases: ['sb'], key: 'skipBower', required: false }, { name: 'skip-git', default: false, aliases: ['sg'], key: 'skipGit', required: false }, { name: 'directory', aliases: ['dir'], key: 'directory', required: false } ], anonymousOptions: ['<app-name>'] }, { name: 'serve', description: 'Builds and serves your app, rebuilding on file changes.', aliases: ['server', 's'], works: 'insideProject', availableOptions: [ { name: 'port', default: 4200, aliases: ['p'], key: 'port', required: false }, { name: 'host', description: 'Listens on all interfaces by default', aliases: ['H'], key: 'host', required: false }, { name: 'proxy', aliases: ['pr', 'pxy'], key: 'proxy', required: false }, { name: 'insecure-proxy', default: false, description: 'Set false to proxy self-signed SSL certificates', aliases: ['inspr'], key: 'insecureProxy', required: false }, { name: 'watcher', default: 'events', aliases: ['w'], key: 'watcher', required: false }, { name: 'live-reload', default: true, aliases: ['lr'], key: 'liveReload', required: false }, { name: 'live-reload-host', description: 'Defaults to host', aliases: ['lrh'], key: 'liveReloadHost', required: false }, { name: 'live-reload-port', description: '(Defaults to port number within [49152...65535])', aliases: ['lrp'], key: 'liveReloadPort', required: false }, { name: 'environment', default: 'development', aliases: [ 'e', { dev: 'development' }, { prod: 'production' } ], key: 'environment', required: false }, { name: 'output-path', type: 'path', default: 'dist/', aliases: ['op', 'out'], key: 'outputPath', required: false }, { name: 'ssl', default: false, key: 'ssl', required: false }, { name: 'ssl-key', default: 'ssl/server.key', key: 'sslKey', required: false }, { name: 'ssl-cert', default: 'ssl/server.crt', key: 'sslCert', required: false } ], anonymousOptions: [] }, { name: 'test', description: 'Runs your app\'s test suite.', aliases: ['t'], works: 'insideProject', availableOptions: [ { name: 'environment', default: 'test', aliases: ['e'], key: 'environment', required: false }, { name: 'config-file', default: './testem.json', aliases: ['c', 'cf'], key: 'configFile', required: false }, { name: 'server', default: false, aliases: ['s'], key: 'server', required: false }, { name: 'host', aliases: ['H'], key: 'host', required: false }, { name: 'test-port', default: 7357, description: 'The test port to use when running with --server.', aliases: ['tp'], key: 'testPort', required: false }, { name: 'filter', description: 'A string to filter tests to run', aliases: ['f'], key: 'filter', required: false }, { name: 'module', description: 'The name of a test module to run', aliases: ['m'], key: 'module', required: false }, { name: 'watcher', default: 'events', aliases: ['w'], key: 'watcher', required: false }, { name: 'launch', default: false, description: 'A comma separated list of browsers to launch for tests.', key: 'launch', required: false }, { name: 'reporter', description: 'Test reporter to use [tap|dot|xunit]', aliases: ['r'], key: 'reporter', required: false }, { name: 'test-page', description: 'Test page to invoke', key: 'testPage', required: false }, { name: 'path', description: 'Path to a build to run tests against.', key: 'path', required: false }, { name: 'query', description: 'A query string to append to the test page URL.', key: 'query', required: false } ], anonymousOptions: [] }, { name: 'version', description: 'outputs ember-cli version', aliases: ['v', '--version', '-v'], works: 'everywhere', availableOptions: [ { name: 'verbose', default: false, key: 'verbose', required: false } ], anonymousOptions: [] } ], addons: [] }); }); it('prints all blueprints', function() { command.run(options, ['generate']); var output = options.ui.output; var testString = processHelpString(EOL + '\ ' + EOL + '\ ' + EOL + '\ Available blueprints:' + EOL + '\ ember-cli:' + EOL + '\ acceptance-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an acceptance test for a feature.\u001b[39m' + EOL + '\ adapter \u001b[33m<name>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ \u001b[90mGenerates an ember-data adapter.\u001b[39m' + EOL + '\ \u001b[36m--base-class\u001b[39m' + EOL + '\ adapter-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an ember-data adapter unit test\u001b[39m' + EOL + '\ addon \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mThe default blueprint for ember-cli addons.\u001b[39m' + EOL + '\ addon-import \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an import wrapper.\u001b[39m' + EOL + '\ app \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mThe default blueprint for ember-cli projects.\u001b[39m' + EOL + '\ blueprint \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a blueprint and definition.\u001b[39m' + EOL + '\ component \u001b[33m<name>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ \u001b[90mGenerates a component. Name must contain a hyphen.\u001b[39m' + EOL + '\ \u001b[36m--path\u001b[39m \u001b[36m(Default: components)\u001b[39m' + EOL + '\ \u001b[90maliases: -no-path (--path=)\u001b[39m' + EOL + '\ component-addon \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a component. Name must contain a hyphen.\u001b[39m' + EOL + '\ component-test \u001b[33m<name>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ \u001b[90mGenerates a component integration or unit test.\u001b[39m' + EOL + '\ \u001b[36m--test-type\u001b[39m \u001b[36m(Default: integration)\u001b[39m' + EOL + '\ \u001b[90maliases: -i (--test-type=integration), -u (--test-type=unit), -integration (--test-type=integration), -unit (--test-type=unit)\u001b[39m' + EOL + '\ controller \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a controller.\u001b[39m' + EOL + '\ controller-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a controller unit test.\u001b[39m' + EOL + '\ helper \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a helper function.\u001b[39m' + EOL + '\ helper-addon \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an import wrapper.\u001b[39m' + EOL + '\ helper-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a helper unit test.\u001b[39m' + EOL + '\ http-mock \u001b[33m<endpoint-path>\u001b[39m' + EOL + '\ \u001b[90mGenerates a mock api endpoint in /api prefix.\u001b[39m' + EOL + '\ http-proxy \u001b[33m<local-path> <remote-url>\u001b[39m' + EOL + '\ \u001b[90mGenerates a relative proxy to another server.\u001b[39m' + EOL + '\ in-repo-addon \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mThe blueprint for addon in repo ember-cli addons.\u001b[39m' + EOL + '\ initializer \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an initializer.\u001b[39m' + EOL + '\ initializer-addon \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an import wrapper.\u001b[39m' + EOL + '\ initializer-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an initializer unit test.\u001b[39m' + EOL + '\ lib \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a lib directory for in-repo addons.\u001b[39m' + EOL + '\ mixin \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a mixin.\u001b[39m' + EOL + '\ mixin-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a mixin unit test.\u001b[39m' + EOL + '\ model \u001b[33m<name> <attr:type>\u001b[39m' + EOL + '\ \u001b[90mGenerates an ember-data model.\u001b[39m' + EOL + '\ model-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a model unit test.\u001b[39m' + EOL + '\ resource \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a model and route.\u001b[39m' + EOL + '\ route \u001b[33m<name>\u001b[39m \u001b[36m<options...>\u001b[39m' + EOL + '\ \u001b[90mGenerates a route and a template, and registers the route with the router.\u001b[39m' + EOL + '\ \u001b[36m--path\u001b[39m \u001b[36m(Default: )\u001b[39m' + EOL + '\ \u001b[36m--skip-router\u001b[39m \u001b[36m(Default: false)\u001b[39m' + EOL + '\ \u001b[36m--reset-namespace\u001b[39m' + EOL + '\ route-addon \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates import wrappers for a route and its template.\u001b[39m' + EOL + '\ route-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a route unit test.\u001b[39m' + EOL + '\ serializer \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an ember-data serializer.\u001b[39m' + EOL + '\ serializer-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a serializer unit test.\u001b[39m' + EOL + '\ server \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a server directory for mocks and proxies.\u001b[39m' + EOL + '\ service \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a service.\u001b[39m' + EOL + '\ service-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a service unit test.\u001b[39m' + EOL + '\ template \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a template.\u001b[39m' + EOL + '\ test-helper \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a test helper.\u001b[39m' + EOL + '\ transform \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an ember-data value transform.\u001b[39m' + EOL + '\ transform-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a transform unit test.\u001b[39m' + EOL + '\ util \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a simple utility module/function.\u001b[39m' + EOL + '\ util-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a util unit test.\u001b[39m' + EOL + '\ vendor-shim \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates an ES6 module shim for global libraries.\u001b[39m' + EOL + '\ view \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a view subclass.\u001b[39m' + EOL + '\ view-test \u001b[33m<name>\u001b[39m' + EOL + '\ \u001b[90mGenerates a view unit test.\u001b[39m' + EOL + '\ ' + EOL); expect(output).to.endWith(testString); }); });