topical media & game development

talk show tell print

mobile-query-three-www-vendor-bootstrap-docs-build-node-modules-hogan.js-test-mustache.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 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);
    };
  }
  
  var Hogan = require(__dirname + '/../lib/hogan');
  var template = fs.readFileSync(__dirname + '/../lib/template.js').toString();
  var compiler = fs.readFileSync(__dirname + '/../lib/compiler.js').toString();
  var mustache_wrapper = fs.readFileSync(__dirname + '/../wrappers/mustache.js.mustache').toString();
  
  // Create a Mustache.js emulator from the distribution template
  var engines = (new Function(Hogan.compile(mustache_wrapper).render({template: template, compiler: compiler}) +
                                            '; return {Hogan: Hogan, Mustache: Mustache};'))();
  
  var Mustache = engines.Mustache;
  var Hogan2 = engines.Hogan;
  
  // sanity check
  is(Mustache.hasOwnProperty('to_html'), true, 'Mustache has to_html method.');
  
  // Check for Mustache.js partial resolution behavior.
  var context = {
    foo: 'bar',
    mypartial: {
            baz: 'qux'
    }
  }
  var text = 'abc {{foo}} def {{>mypartial}} ghi';
  var partialText = '{{baz}}';
  var s = Mustache.to_html(text, context, {'mypartial': partialText});
  is(s, 'abc bar def qux ghi', 'Correct emulation of Mustache.js partial-name-in-context resolution.');
  
  // Now check to see that the Hogan resolution is unaffected.
  var t = Hogan2.compile(text);
  s = t.render(context, {'mypartial': partialText});
  is(s, 'abc bar def  ghi', 'Hogan behavior not changed by Mustache.js emulation.');
  
  // Check for sendFun behavior
  var buf = "";
  function send(s) {
    buf += "-FOO " + s + " FOO-";
  }
  var s = Mustache.to_html(text, context, {'mypartial': partialText}, send);
  is(buf, '-FOO abc bar def qux ghi FOO-', 'Correct emulation of Mustache.js sendFun.');
  
  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.