ember-cli-ajh
Version:
Command line tool for developing ambitious ember.js apps
1,253 lines (1,234 loc) • 50 kB
JavaScript
/*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);
});
});