ember-cli-ajh
Version:
Command line tool for developing ambitious ember.js apps
204 lines (171 loc) • 8.36 kB
JavaScript
;
var path = require('path');
var fs = require('fs');
var expect = require('chai').expect;
var runCommand = require('../helpers/run-command');
var acceptance = require('../helpers/acceptance');
var copyFixtureFiles = require('../helpers/copy-fixture-files');
var assertDirEmpty = require('../helpers/assert-dir-empty');
var createTestTargets = acceptance.createTestTargets;
var teardownTestTargets = acceptance.teardownTestTargets;
var linkDependencies = acceptance.linkDependencies;
var cleanupRun = acceptance.cleanupRun;
var appName = 'some-cool-app';
describe('Acceptance: preprocessor-smoke-test', function() {
before(function() {
this.timeout(360000);
return createTestTargets(appName);
});
after(function() {
this.timeout(15000);
return teardownTestTargets();
});
beforeEach(function() {
this.timeout(360000);
return linkDependencies(appName);
});
afterEach(function() {
this.timeout(15000);
return cleanupRun().then(function() {
assertDirEmpty('tmp');
});
});
it('addons with standard preprocessors compile correctly', function() {
this.timeout(100000);
return copyFixtureFiles('preprocessor-tests/app-with-addon-with-preprocessors')
.then(function() {
var packageJsonPath = path.join(__dirname, '..', '..', 'tmp', appName, 'package.json');
var packageJson = require(packageJsonPath);
packageJson.devDependencies['broccoli-sass'] = 'latest';
packageJson.devDependencies['ember-cool-addon'] = 'latest';
return fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson));
})
.then(function() {
return runCommand(path.join('.', 'node_modules', 'ember-cli', 'bin', 'ember'), 'build');
})
.then(function() {
var mainCSS = fs.readFileSync(path.join('.', 'dist', 'assets', 'some-cool-app.css'), {
encoding: 'utf8'
});
var vendorCSS = fs.readFileSync(path.join('.', 'dist', 'assets', 'vendor.css'), {
encoding: 'utf8'
});
expect(mainCSS).to.contain('app styles included');
expect(vendorCSS).to.contain('addon styles included');
});
});
it('addon registry entries are added in the proper order', function() {
this.timeout(100000);
return copyFixtureFiles('preprocessor-tests/app-registry-ordering')
.then(function() {
var packageJsonPath = path.join(__dirname, '..', '..', 'tmp', appName, 'package.json');
var packageJson = require(packageJsonPath);
packageJson.devDependencies['first-dummy-preprocessor'] = 'latest';
packageJson.devDependencies['second-dummy-preprocessor'] = 'latest';
return fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson));
})
.then(function() {
return runCommand(path.join('.', 'node_modules', 'ember-cli', 'bin', 'ember'), 'build');
})
.then(function() {
var appJs = fs.readFileSync(path.join('.', 'dist', 'assets', 'some-cool-app.js'), {
encoding: 'utf8'
});
expect(appJs).to.not.contain('__SECOND_PREPROCESSOR_REPLACEMENT_TOKEN__', 'token should not be contained');
expect(appJs).to.not.contain('__FIRST_PREPROCESSOR_REPLACEMENT_TOKEN__', 'token should not be contained');
expect(appJs).to.contain('replacedByPreprocessor', 'token should have been replaced in app bundle');
});
});
it('addons without preprocessors compile correctly', function() {
this.timeout(100000);
return copyFixtureFiles('preprocessor-tests/app-with-addon-without-preprocessors')
.then(function() {
var packageJsonPath = path.join(__dirname, '..', '..', 'tmp', appName, 'package.json');
var packageJson = require(packageJsonPath);
packageJson.devDependencies['broccoli-sass'] = 'latest';
packageJson.devDependencies['ember-cool-addon'] = 'latest';
return fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson));
})
.then(function() {
return runCommand(path.join('.', 'node_modules', 'ember-cli', 'bin', 'ember'), 'build');
})
.then(function() {
var mainCSS = fs.readFileSync(path.join('.', 'dist', 'assets', 'some-cool-app.css'), {
encoding: 'utf8'
});
var vendorCSS = fs.readFileSync(path.join('.', 'dist', 'assets', 'vendor.css'), {
encoding: 'utf8'
});
expect(mainCSS).to.contain('app styles included');
expect(vendorCSS).to.contain('addon styles included');
});
});
/*
[ app ] -> [ addon ] -> [ preprocessor addon ]
| |
| |--- preprocessor applies to this
|
|-- preprocessor should not apply to this
*/
it('addons depending on preprocessor addon preprocesses addon but not app', function() {
this.timeout(100000);
return copyFixtureFiles('preprocessor-tests/app-with-addon-with-preprocessors-2')
.then(function() {
var packageJsonPath = path.join(__dirname, '..', '..', 'tmp', appName, 'package.json');
var packageJson = require(packageJsonPath);
packageJson.devDependencies['ember-cool-addon'] = 'latest';
return fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson));
})
.then(function() {
return runCommand(path.join('.', 'node_modules', 'ember-cli', 'bin', 'ember'), 'build');
})
.then(function() {
var appJs = fs.readFileSync(path.join('.', 'dist', 'assets', 'some-cool-app.js'), {
encoding: 'utf8'
});
var vendorJs = fs.readFileSync(path.join('.', 'dist', 'assets', 'vendor.js'), {
encoding: 'utf8'
});
expect(appJs).to.contain('__PREPROCESSOR_REPLACEMENT_TOKEN__', 'token should not have been replaced in app bundle');
expect(appJs).to.not.contain('replacedByPreprocessor', 'token should not have been replaced in app bundle');
expect(vendorJs).to.not.contain('__PREPROCESSOR_REPLACEMENT_TOKEN__', 'token should have been replaced in vendor bundle');
expect(vendorJs).to.contain('replacedByPreprocessor', 'token should have been replaced in vendor bundle');
});
});
/*
[ app ] -> [ addon ] -> [ addon ] -> [ preprocessor addon ]
| | |
| | |--- preprocessor applies to this
| |
| |-- preprocessor should not apply to this
|
|-- preprocessor should not apply to this
*/
it('addon N levels deep depending on preprocessor preprocesses that parent addon only', function() {
this.timeout(100000);
return copyFixtureFiles('preprocessor-tests/app-with-addon-with-preprocessors-3')
.then(function() {
var packageJsonPath = path.join(__dirname, '..', '..', 'tmp', appName, 'package.json');
var packageJson = require(packageJsonPath);
packageJson.devDependencies['ember-shallow-addon'] = 'latest';
return fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson));
})
.then(function() {
return runCommand(path.join('.', 'node_modules', 'ember-cli', 'bin', 'ember'), 'build');
})
.then(function() {
var appJs = fs.readFileSync(path.join('.', 'dist', 'assets', 'some-cool-app.js'), {
encoding: 'utf8'
});
var vendorJs = fs.readFileSync(path.join('.', 'dist', 'assets', 'vendor.js'), {
encoding: 'utf8'
});
expect(appJs).to.contain('__PREPROCESSOR_REPLACEMENT_TOKEN__', 'token should not have been replaced in app bundle');
expect(appJs).to.not.contain('replacedByPreprocessor', 'token should not have been replaced in app bundle');
expect(vendorJs).to.not.contain('deep: __PREPROCESSOR_REPLACEMENT_TOKEN__', 'token should have been replaced in deep component');
expect(vendorJs).to.contain('deep: "replacedByPreprocessor"', 'token should have been replaced in deep component');
expect(vendorJs).to.contain('shallow: __PREPROCESSOR_REPLACEMENT_TOKEN__', 'token should not have been replaced in shallow component');
expect(vendorJs).to.not.contain('shallow: "replacedByPreprocessor"', 'token should not have been replaced in shallow component');
});
});
});