UNPKG

closure-builder

Version:

Simple Closure, Soy and JavaScript Build system

246 lines (228 loc) 8.67 kB
/** * @fileoverview Closure Compilers - Closure Templates Compiler * * @license Copyright 2016 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) */ let assert = require('assert'); let fs = require('fs'); let closureTemplates = require('../../compilers/closure-templates/compiler.js'); describe('Closure Templates::', function() { it('Single file', function(done) { this.timeout(25000); let files = ['test_files/soy_test_1.soy']; closureTemplates.compile(files, null, null, function(errors, warnings, files) { assert(!errors); assert(!warnings); let content = fs.readFileSync(files[0]).toString(); assert(content.indexOf('soy_test_1.helloName') !== -1); assert(content.indexOf('goog.provide(\'soy_test_1\');') === -1); done(); }); }); it('Two files', function(done) { this.timeout(25000); let files = [ 'test_files/soy_test_1.soy', 'test_files/soy_test_2.soy', ]; closureTemplates.compile(files, null, null, function(errors, warnings, files) { assert(!errors); assert(!warnings); let content1 = fs.readFileSync(files[0]).toString(); let content2 = fs.readFileSync(files[1]).toString(); assert(content1.indexOf('soy_test_1.helloName') !== -1); assert(content1.indexOf('goog.provide(\'soy_test_1\');') === -1); assert(content2.indexOf('soy_test_2.helloName') !== -1); assert(content2.indexOf('soy_test_2.helloNames') !== -1); assert(content2.indexOf('goog.provide(\'soy_test_2\');') === -1); done(); }); }); it('shouldProvideRequireSoyNamespaces', function(done) { this.timeout(25000); let files = ['test_files/soy_test_1.soy']; let options = { shouldProvideRequireSoyNamespaces: true, }; closureTemplates.compile(files, options, null, function(errors, warnings, files) { assert(!errors); assert(!warnings); let content = fs.readFileSync(files[0]).toString(); assert(content.indexOf('soy_test_1.helloName') !== -1); assert(content.indexOf('goog.provide(\'soy_test_1\');') !== -1); done(); }); }); describe('shouldGenerateGoogMsgDefs', function() { it('bidiGlobalDir', function(done) { this.timeout(25000); let files = ['test_files/soy_test_3.soy']; let options = { shouldGenerateGoogMsgDefs: true, bidiGlobalDir: 1, }; closureTemplates.compile(files, options, null, function(errors, warnings, files) { assert(!errors); assert(!warnings); let content = fs.readFileSync(files[0]).toString(); assert(content.indexOf('var soy_test_3 = {}') !== -1); assert(content.indexOf('goog.getMsg(') !== -1); done(); }); }); it('useGoogIsRtlForBidiGlobalDir', function(done) { this.timeout(25000); let files = ['test_files/soy_test_3.soy']; let options = { shouldGenerateGoogMsgDefs: true, shouldProvideRequireSoyNamespaces: true, useGoogIsRtlForBidiGlobalDir: true, }; closureTemplates.compile(files, options, null, function(errors, warnings, files) { assert(!errors); assert(!warnings); let content = fs.readFileSync(files[0]).toString(); assert(content.indexOf('goog.provide(\'soy_test_3\');') !== -1); assert(content.indexOf('goog.require(\'goog.i18n.bidi\');') !== -1); assert(content.indexOf('goog.getMsg(') !== -1); assert(content.indexOf('MSG_EXTERNAL_') === -1); done(); }); }); it('googMsgsAreExternal', function(done) { this.timeout(25000); let files = ['test_files/soy_test_3.soy']; let options = { shouldGenerateGoogMsgDefs: true, shouldProvideRequireSoyNamespaces: true, googMsgsAreExternal: true, useGoogIsRtlForBidiGlobalDir: true, }; closureTemplates.compile(files, options, null, function(errors, warnings, files) { assert(!errors); assert(!warnings); let content = fs.readFileSync(files[0]).toString(); assert(content.indexOf('goog.provide(\'soy_test_3\');') !== -1); assert(content.indexOf('goog.require(\'goog.i18n.bidi\');') !== -1); assert(content.indexOf('goog.getMsg(') !== -1); assert(content.indexOf('MSG_EXTERNAL_') !== -1); done(); }); }); it('googMsgsAreExternal - bidiGlobalDir', function(done) { this.timeout(25000); let files = ['test_files/soy_test_3.soy']; let options = { shouldGenerateGoogMsgDefs: true, shouldProvideRequireSoyNamespaces: true, googMsgsAreExternal: true, bidiGlobalDir: 1, }; closureTemplates.compile(files, options, null, function(errors, warnings, files) { assert(!errors); assert(!warnings); let content = fs.readFileSync(files[0]).toString(); assert(content.indexOf('goog.provide(\'soy_test_3\');') !== -1); assert(content.indexOf('goog.require(\'goog.i18n.bidi\');') === -1); assert(content.indexOf('goog.getMsg(') !== -1); assert(content.indexOf('MSG_EXTERNAL_') !== -1); done(); }); }); }); it('Custom i18n function', function(done) { this.timeout(25000); let files = ['test_files/soy_test_3.soy']; let options = { i18n: 'i18nTest', }; closureTemplates.compile(files, options, null, function(errors, warnings, files) { assert(!errors); assert(!warnings); let content = fs.readFileSync(files[0]).toString(); assert(content.includes('goog.provide(\'soy_test_3\');')); assert(!content.includes('goog.require(\'goog.i18n.bidi\');')); assert(!content.includes('goog.getMsg(')); assert(content.includes('i18nTest(')); assert(content.includes('MSG_EXTERNAL_')); done(); }); }); describe('parseErrorMessage', function() { it('No Errors, No warnings', function() { let result = closureTemplates.parseErrorMessage(); assert(result.errors === 0); assert(result.warnings === 0); }); it('Error', function() { let result1 = closureTemplates.parseErrorMessage( 'INTERNAL COMPILER ERROR'); let result2 = closureTemplates.parseErrorMessage('exception'); let result3 = closureTemplates.parseErrorMessage('Error: ...'); let result4 = closureTemplates.parseErrorMessage('Unknown'); assert(result1.errors === 1); assert(result1.warnings === 0); assert(result2.errors === 1); assert(result2.warnings === 0); assert(result3.errors === 1); assert(result3.warnings === 0); assert(result4.errors === 1); assert(result4.warnings === 0); }); it('Warning', function() { let result = closureTemplates.parseErrorMessage('Warning: ...'); assert(result.errors === 0); assert(result.warnings === 1); }); it('Ignore', function() { let result = closureTemplates.parseErrorMessage( 'Java HotSpot(TM) Client VM warning'); assert(result.errors === 0); assert(result.warnings === 0); }); }); /* it('Custom i18n tags', function(done) { this.timeout(25000); var files = ['test_files/special/soy_test_i18n.soy']; var options = { use_i18n: true }; closureTemplates.compile(files, options, null, function(errors, warnings, files) { assert(!errors); assert(!warnings); var content = fs.readFileSync(files[0]).toString(); assert(content.indexOf('goog.provide(\'soy_test_i18n\');') !== -1); assert(content.indexOf('{i18n}') === -1); assert(content.indexOf('{/i18n}') === -1); assert(content.indexOf('goog.getMsg(') === -1); assert(content.indexOf('i18nTest(') !== -1); assert(content.indexOf('MSG_EXTERNAL_') !== -1); done(); }); }); */ });