closure-builder
Version:
Simple Closure, Soy and JavaScript Build system
325 lines (307 loc) • 10.2 kB
JavaScript
/**
* @fileoverview Closure Builder Test - Compiler
*
* @license Copyright 2015 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @author mbordihn@google.com (Markus Bordihn)
*/
var assert = require('assert');
var fs = require('fs-extra');
var buildTools = require('../build_tools.js');
var closureBuilder = require('../closure-builder');
var testConfigs = require('../test/test_configs.js');
var largeMemoryTest = buildTools.checkAvailableMemory(600);
describe('ClosureBuilder', function() {
closureBuilder.showMessages(false);
describe('Structure', function() {
it('Object', function() {
assert.equal(typeof closureBuilder, 'object');
});
it('build', function() {
assert.equal(typeof closureBuilder.build, 'function');
});
it('showMessages', function() {
assert.equal(typeof closureBuilder.showMessages, 'function');
});
});
describe('Options', function() {
it('license', function(done) {
this.timeout(30000);
closureBuilder.build(testConfigs.optionLicenseConfig,
function(errors, warnings, files, content) {
var license = fs.readFileSync(testConfigs.optionLicenseConfig.license,
'utf8');
assert(!errors);
assert(content);
assert(content.indexOf(license) != -1);
done();
});
});
});
describe('CSS files', function() {
it('compile', function(done) {
this.timeout(20000);
closureBuilder.build(testConfigs.cssConfig, function(errors, warnings,
files, content) {
var expected = '.menueliste li a,.submenue li a{text-decoration:none}' +
'body{margin:0;padding:0;background:#e4e9ec}#container1,#container2' +
',#container3{width:900px}#content{background:red;margin:0 5px;min-' +
'height:1050px}#menu{margin:50px auto;border:1px solid #000}.menuel' +
'iste li{text-align:center;display:block;margin:25px 0 0;background' +
':#7d94a1;list-style:none}.menueliste li a:hover{display:block;bord' +
'er-left:10px solid #bacbe3;border-right:10px solid #7d94a1;backgro' +
'und:#60777f}.submenue li{margin:0;padding:0;text-align:left;border' +
'-bottom:1px solid #60777f;list-style:none}.submenue li a{display:b' +
'lock;padding:5px 5px 5px .5em;border-left:10px solid #7d94a1;borde' +
'r-right:10px solid #bacbe3;background:#9aacbb;width:119px}.submenu' +
'e li a:hover{padding:5px 5px 5px .5em;border-left:10px solid #1c64' +
'd1;border-right:10px solid #5ba3e0;background:#7d94a1}';
assert(!errors);
assert(content);
assert.equal(content, expected);
done();
});
});
});
describe('Resources files', function() {
it('copy', function(done) {
this.timeout(20000);
closureBuilder.build(testConfigs.resourcesConfig, function(errors) {
assert(!errors);
done();
});
});
it('Expected Error message', function(done) {
this.timeout(20000);
closureBuilder.build(testConfigs.resourcesNotExistsConfig,
function(errors) {
assert(errors);
done();
});
});
});
describe('Remote resources files', function() {
it('downloading', function(done) {
this.timeout(20000);
closureBuilder.build(testConfigs.resourcesRemoteConfig, function(errors) {
assert(!errors);
done();
});
});
});
describe('Soy file', function() {
it('compile', function(done) {
this.timeout(30000);
closureBuilder.build(testConfigs.soyTestConfig, function(errors,
warnings, files) {
assert(!errors);
assert(!warnings);
assert(files);
done();
});
});
});
describe('ECMA Script 6', function() {
it('Const', function(done) {
this.timeout(40000);
closureBuilder.build(testConfigs.closureECMAScript6ConstConfig, function(
errors) {
assert(!errors);
done();
});
});
it('Let', function(done) {
this.timeout(40000);
closureBuilder.build(testConfigs.closureECMAScript6LetConfig, function(
errors) {
assert(!errors);
done();
});
});
it('No ECMA Script 6', function(done) {
this.timeout(40000);
closureBuilder.build(testConfigs.closureNoECMAScript6Config, function(
errors) {
assert(!errors);
done();
});
});
});
describe('Markdown files', function() {
it('Convert to HTML', function(done) {
this.timeout(25000);
closureBuilder.build(testConfigs.markdownConfig, function(errors) {
assert(!errors);
done();
});
});
});
describe('Closure files', function() {
it('Single file', function(done) {
this.timeout(25000);
closureBuilder.build(testConfigs.closureTest1Config, function(errors) {
assert(!errors);
done();
});
});
it('Two files', function(done) {
this.timeout(25000);
closureBuilder.build(testConfigs.closureTest2Config, function(errors) {
assert(!errors);
done();
});
});
it('Group of files', function(done) {
this.timeout(25000);
closureBuilder.build(testConfigs.closureTestGroupConfig, function(
errors, warnings) {
assert(!errors);
assert(!warnings);
done();
});
});
it('Module files', function(done) {
this.timeout(30000);
closureBuilder.build(testConfigs.closureTestModuleConfig, function(
errors, warnings) {
console.log(errors, warnings);
assert(!errors);
assert(!warnings);
done();
});
});
it('Duplicate input files', function(done) {
this.timeout(25000);
closureBuilder.build(testConfigs.closureTestDuplicateConfig, function(
errors, warnings) {
assert(!errors);
assert(!warnings);
done();
});
});
it('Externs', function(done) {
this.timeout(25000);
closureBuilder.build(testConfigs.closureTestExternConfig, function(
errors, warnings) {
assert(!errors);
assert(!warnings);
done();
});
});
it('Expected Error Message', function(done) {
this.timeout(30000);
closureBuilder.build(testConfigs.closureTestErrorConfig, function(
errors, warnings) {
assert(errors);
assert(!warnings);
done();
});
});
it('Expected Warning Message', function(done) {
this.timeout(30000);
closureBuilder.build(testConfigs.closureTestWarningConfig, function(
errors, warnings) {
assert(!errors);
assert(warnings);
done();
});
});
it('Disabled Warning Message', function(done) {
this.timeout(30000);
closureBuilder.build(testConfigs.closureTestWarningDisabledConfig,
function(errors, warnings) {
assert(!errors);
assert(!warnings);
done();
});
});
it('Automatic @export handling', function(done) {
this.timeout(40000);
closureBuilder.build(testConfigs.closureTestExportConfig, function(
errors, warnings, files, content) {
assert(!errors);
assert(content);
assert(content.indexOf(
'goog.exportSymbol("closure_test_export"') !== -1);
assert(content.indexOf(
'goog.exportProperty(closure_test_export.prototype,"visible"'
) !== -1);
assert(content.indexOf(
'goog.exportProperty(closure_test_export.prototype,"invisible'
) === -1);
done();
});
});
});
describe('NodeJs', function() {
it('compile', function(done) {
this.timeout(30000);
closureBuilder.build(testConfigs.nodeTestConfig, function(errors) {
assert(!errors);
done();
});
});
});
describe('NodeJs - Type overwrite', function() {
it('compile', function(done) {
this.timeout(25000);
closureBuilder.build(testConfigs.nodeToJsTestConfig, function(errors,
warnings, files, content) {
assert(!errors);
assert(!warnings);
assert(content);
done();
});
});
});
describe('Closure library', function() {
it('compile', function(done) {
if (!largeMemoryTest) {
return done();
}
this.timeout(140000);
closureBuilder.build(testConfigs.closureLibraryConfig, function(errors,
warnings, files, content) {
assert(!errors);
assert(!warnings);
assert(content);
assert(content.indexOf('closure_library_test=func') !== -1);
assert(content.indexOf('goog.ui.Button=func') !== -1);
assert(content.indexOf('goog.ui.CharPicker=func') !== -1);
assert(content.indexOf('goog.ui.MenuItem=func') !== -1);
done();
});
});
});
describe('Closure library - Remote Service', function() {
it('compile', function(done) {
if (!largeMemoryTest) {
return done();
}
this.timeout(140000);
closureBuilder.build(testConfigs.closureLibraryConfigRemoteService,
function(errors, warnings, files, content) {
assert(!errors);
assert(!warnings);
assert(content);
assert(content.indexOf('closure_library_test=func') !== -1);
assert(content.indexOf('goog.ui.Button=func') !== -1);
assert(content.indexOf('goog.ui.CharPicker=func') !== -1);
assert(content.indexOf('goog.ui.MenuItem=func') !== -1);
done();
});
});
});
});