topical media & game development

talk show tell print

mobile-query-three-www-vendor-bootstrap-docs-build-node-modules-hogan.js-test-spec.js / js



  /*
   *  Copyright 2011 Twitter, Inc.
   *  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.
   */
  
  var Hogan = Hogan || require('../lib/hogan');
  var doc = this["document"];
  var fs = require('fs');
  
  var passed = 0;
  var failed = 0;
  
  if (!this["output"]) {
    var output = function (string) {
      return doc ? doc.write(string + '<br/>') : console.log(string);
    };
  }
  
  function runTest(tests) {
    tests.forEach(function(test) {
      var partials = {};
      for (var i in test.partials) {
        partials[i] = Hogan.compile(test.partials[i]);
      }
      var t = Hogan.compile(test.template);
  
      if (test.data.lambda) {
        var func = (new Function ('return ' + test.data.lambda.js)());
        test.data.lambda = function() { return func; };
      }
  
      var s = t.render(test.data, partials);
      is(s, test.expected, test.name + ': ' + test.desc);
    });
  }
  
  var testDir = './test/spec/specs';
  var files = fs.readdirSync(testDir)
                .filter(function(f) { return f.indexOf('.json') > 0; })
                .map(function(f) { return testDir + '/' + f});
  
  for (var i = 0; i < files.length; i++) {
    var test = JSON.parse(fs.readFileSync(files[i]).toString());
    runTest(test.tests);
  }
  
  function is(got, expected, msg) {
    if (got === expected) {
      output("OK:   " + msg);
      ++passed;
    } else {
      output("FAIL: " + msg);
      output("Expected |" + expected + "|");
      output("     Got |" + got + "|");
      ++failed;
    }
  }
  
  function complete() {
    output("\nTests Complete");
    output("--------------");
    output("Passed: " + passed);
    output("Failed: " + failed);
    output("\n");
  }
  
  complete();
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.