--- /dev/null
+<!doctype html>
+<html lang="en">
+<head>
+ <title>Code coverage report for spec/string-params.js</title>
+ <meta charset="utf-8">
+
+ <link rel="stylesheet" href="../prettify.css">
+
+ <style>
+ body, html {
+ margin:0; padding: 0;
+ }
+ body {
+ font-family: Helvetica Neue, Helvetica,Arial;
+ font-size: 10pt;
+ }
+ div.header, div.footer {
+ background: #eee;
+ padding: 1em;
+ }
+ div.header {
+ z-index: 100;
+ position: fixed;
+ top: 0;
+ border-bottom: 1px solid #666;
+ width: 100%;
+ }
+ div.footer {
+ border-top: 1px solid #666;
+ }
+ div.body {
+ margin-top: 10em;
+ }
+ div.meta {
+ font-size: 90%;
+ text-align: center;
+ }
+ h1, h2, h3 {
+ font-weight: normal;
+ }
+ h1 {
+ font-size: 12pt;
+ }
+ h2 {
+ font-size: 10pt;
+ }
+ pre {
+ font-family: Consolas, Menlo, Monaco, monospace;
+ margin: 0;
+ padding: 0;
+ line-height: 14px;
+ font-size: 14px;
+ -moz-tab-size: 2;
+ -o-tab-size: 2;
+ tab-size: 2;
+ }
+
+ div.path { font-size: 110%; }
+ div.path a:link, div.path a:visited { color: #000; }
+ table.coverage { border-collapse: collapse; margin:0; padding: 0 }
+
+ table.coverage td {
+ margin: 0;
+ padding: 0;
+ color: #111;
+ vertical-align: top;
+ }
+ table.coverage td.line-count {
+ width: 50px;
+ text-align: right;
+ padding-right: 5px;
+ }
+ table.coverage td.line-coverage {
+ color: #777 !important;
+ text-align: right;
+ border-left: 1px solid #666;
+ border-right: 1px solid #666;
+ }
+
+ table.coverage td.text {
+ }
+
+ table.coverage td span.cline-any {
+ display: inline-block;
+ padding: 0 5px;
+ width: 40px;
+ }
+ table.coverage td span.cline-neutral {
+ background: #eee;
+ }
+ table.coverage td span.cline-yes {
+ background: #b5d592;
+ color: #999;
+ }
+ table.coverage td span.cline-no {
+ background: #fc8c84;
+ }
+
+ .cstat-yes { color: #111; }
+ .cstat-no { background: #fc8c84; color: #111; }
+ .fstat-no { background: #ffc520; color: #111 !important; }
+ .cbranch-no { background: yellow !important; color: #111; }
+
+ .cstat-skip { background: #ddd; color: #111; }
+ .fstat-skip { background: #ddd; color: #111 !important; }
+ .cbranch-skip { background: #ddd !important; color: #111; }
+
+ .missing-if-branch {
+ display: inline-block;
+ margin-right: 10px;
+ position: relative;
+ padding: 0 4px;
+ background: black;
+ color: yellow;
+ }
+
+ .skip-if-branch {
+ display: none;
+ margin-right: 10px;
+ position: relative;
+ padding: 0 4px;
+ background: #ccc;
+ color: white;
+ }
+
+ .missing-if-branch .typ, .skip-if-branch .typ {
+ color: inherit !important;
+ }
+
+ .entity, .metric { font-weight: bold; }
+ .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }
+ .metric small { font-size: 80%; font-weight: normal; color: #666; }
+
+ div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }
+ div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }
+ div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }
+ div.coverage-summary th.file { border-right: none !important; }
+ div.coverage-summary th.pic { border-left: none !important; text-align: right; }
+ div.coverage-summary th.pct { border-right: none !important; }
+ div.coverage-summary th.abs { border-left: none !important; text-align: right; }
+ div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }
+ div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }
+ div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap; }
+ div.coverage-summary td.pic { min-width: 120px !important; }
+ div.coverage-summary a:link { text-decoration: none; color: #000; }
+ div.coverage-summary a:visited { text-decoration: none; color: #333; }
+ div.coverage-summary a:hover { text-decoration: underline; }
+ div.coverage-summary tfoot td { border-top: 1px solid #666; }
+
+ div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {
+ height: 10px;
+ width: 7px;
+ display: inline-block;
+ margin-left: 0.5em;
+ }
+ div.coverage-summary .yui3-datatable-sort-indicator {
+ background: url("https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png") no-repeat scroll 0 0 transparent;
+ }
+ div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {
+ background-position: 0 -20px;
+ }
+ div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {
+ background-position: 0 -10px;
+ }
+
+ .high { background: #b5d592 !important; }
+ .medium { background: #ffe87c !important; }
+ .low { background: #fc8c84 !important; }
+
+ span.cover-fill, span.cover-empty {
+ display:inline-block;
+ border:1px solid #444;
+ background: white;
+ height: 12px;
+ }
+ span.cover-fill {
+ background: #ccc;
+ border-right: 1px solid #444;
+ }
+ span.cover-empty {
+ background: white;
+ border-left: none;
+ }
+ span.cover-full {
+ border-right: none !important;
+ }
+ pre.prettyprint {
+ border: none !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ }
+ .com { color: #999 !important; }
+ .ignore-none { color: #999; font-weight: normal; }
+
+ </style>
+</head>
+<body>
+<div class="header low">
+ <h1>Code coverage report for <span class="entity">spec/string-params.js</span></h1>
+ <h2>
+
+ Statements: <span class="metric">11.9% <small>(10 / 84)</small></span>
+
+
+ Branches: <span class="metric">100% <small>(0 / 0)</small></span>
+
+
+ Functions: <span class="metric">4.35% <small>(1 / 23)</small></span>
+
+
+ Lines: <span class="metric">11.9% <small>(10 / 84)</small></span>
+
+ Ignored: <span class="metric"><span class="ignore-none">none</span></span>
+ </h2>
+ <div class="path"><a href="../index.html">All files</a> » <a href="index.html">spec/</a> » string-params.js</div>
+</div>
+<div class="body">
+<pre><table class="coverage">
+<tr><td class="line-count">1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177</td><td class="line-coverage"><span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-yes">3</span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-no"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span>
+<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">describe('string params mode', function() {
+ it("arguments to helpers can be retrieved from options hash in string form", <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > var template = CompilerContext.compile('{{wycats is.a slave.driver}}', {stringParams: true});</span>
+
+<span class="cstat-no" title="statement not covered" > var helpers = {</span>
+ wycats: <span class="fstat-no" title="function not covered" >function(passiveVoice, noun) {</span>
+<span class="cstat-no" title="statement not covered" > return "HELP ME MY BOSS " + passiveVoice + ' ' + noun;</span>
+ }
+ };
+
+<span class="cstat-no" title="statement not covered" > var result = template({}, {helpers: helpers});</span>
+
+<span class="cstat-no" title="statement not covered" > equals(result, "HELP ME MY BOSS is.a slave.driver", "String parameters output");</span>
+ });
+
+ it("when using block form, arguments to helpers can be retrieved from options hash in string form", <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > var template = CompilerContext.compile('{{#wycats is.a slave.driver}}help :({{/wycats}}', {stringParams: true});</span>
+
+<span class="cstat-no" title="statement not covered" > var helpers = {</span>
+ wycats: <span class="fstat-no" title="function not covered" >function(passiveVoice, noun, options) {</span>
+<span class="cstat-no" title="statement not covered" > return "HELP ME MY BOSS " + passiveVoice + ' ' +</span>
+ noun + ': ' + options.fn(this);
+ }
+ };
+
+<span class="cstat-no" title="statement not covered" > var result = template({}, {helpers: helpers});</span>
+
+<span class="cstat-no" title="statement not covered" > equals(result, "HELP ME MY BOSS is.a slave.driver: help :(", "String parameters output");</span>
+ });
+
+ it("when inside a block in String mode, .. passes the appropriate context in the options hash", <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > var template = CompilerContext.compile('{{#with dale}}{{tomdale ../need dad.joke}}{{/with}}', {stringParams: true});</span>
+
+<span class="cstat-no" title="statement not covered" > var helpers = {</span>
+ tomdale: <span class="fstat-no" title="function not covered" >function(desire, noun, options) {</span>
+<span class="cstat-no" title="statement not covered" > return "STOP ME FROM READING HACKER NEWS I " +</span>
+ options.contexts[0][desire] + " " + noun;
+ },
+
+ "with": <span class="fstat-no" title="function not covered" >function(context, options) {</span>
+<span class="cstat-no" title="statement not covered" > return options.fn(options.contexts[0][context]);</span>
+ }
+ };
+
+<span class="cstat-no" title="statement not covered" > var result = template({</span>
+ dale: {},
+
+ need: 'need-a'
+ }, {helpers: helpers});
+
+<span class="cstat-no" title="statement not covered" > equals(result, "STOP ME FROM READING HACKER NEWS I need-a dad.joke", "Proper context variable output");</span>
+ });
+
+ it("information about the types is passed along", <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > var template = CompilerContext.compile('{{tomdale "need" dad.joke true false}}', { stringParams: true });</span>
+
+<span class="cstat-no" title="statement not covered" > var helpers = {</span>
+ tomdale: <span class="fstat-no" title="function not covered" >function(desire, noun, trueBool, falseBool, options) {</span>
+<span class="cstat-no" title="statement not covered" > equal(options.types[0], 'STRING', "the string type is passed");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.types[1], 'ID', "the expression type is passed");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.types[2], 'BOOLEAN', "the expression type is passed");</span>
+<span class="cstat-no" title="statement not covered" > equal(desire, "need", "the string form is passed for strings");</span>
+<span class="cstat-no" title="statement not covered" > equal(noun, "dad.joke", "the string form is passed for expressions");</span>
+<span class="cstat-no" title="statement not covered" > equal(trueBool, true, "raw booleans are passed through");</span>
+<span class="cstat-no" title="statement not covered" > equal(falseBool, false, "raw booleans are passed through");</span>
+<span class="cstat-no" title="statement not covered" > return "Helper called";</span>
+ }
+ };
+
+<span class="cstat-no" title="statement not covered" > var result = template({}, { helpers: helpers });</span>
+<span class="cstat-no" title="statement not covered" > equal(result, "Helper called");</span>
+ });
+
+ it("hash parameters get type information", <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > var template = CompilerContext.compile('{{tomdale he.says desire="need" noun=dad.joke bool=true}}', { stringParams: true });</span>
+
+<span class="cstat-no" title="statement not covered" > var helpers = {</span>
+ tomdale: <span class="fstat-no" title="function not covered" >function(exclamation, options) {</span>
+<span class="cstat-no" title="statement not covered" > equal(exclamation, "he.says");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.types[0], "ID");</span>
+
+<span class="cstat-no" title="statement not covered" > equal(options.hashTypes.desire, "STRING");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.hashTypes.noun, "ID");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.hashTypes.bool, "BOOLEAN");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.hash.desire, "need");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.hash.noun, "dad.joke");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.hash.bool, true);</span>
+<span class="cstat-no" title="statement not covered" > return "Helper called";</span>
+ }
+ };
+
+<span class="cstat-no" title="statement not covered" > var result = template({}, { helpers: helpers });</span>
+<span class="cstat-no" title="statement not covered" > equal(result, "Helper called");</span>
+ });
+
+ it("hash parameters get context information", <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > var template = CompilerContext.compile('{{#with dale}}{{tomdale he.says desire="need" noun=../dad/joke bool=true}}{{/with}}', { stringParams: true });</span>
+
+<span class="cstat-no" title="statement not covered" > var context = {dale: {}};</span>
+
+<span class="cstat-no" title="statement not covered" > var helpers = {</span>
+ tomdale: <span class="fstat-no" title="function not covered" >function(exclamation, options) {</span>
+<span class="cstat-no" title="statement not covered" > equal(exclamation, "he.says");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.types[0], "ID");</span>
+
+<span class="cstat-no" title="statement not covered" > equal(options.contexts.length, 1);</span>
+<span class="cstat-no" title="statement not covered" > equal(options.hashContexts.noun, context);</span>
+<span class="cstat-no" title="statement not covered" > equal(options.hash.desire, "need");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.hash.noun, "dad.joke");</span>
+<span class="cstat-no" title="statement not covered" > equal(options.hash.bool, true);</span>
+<span class="cstat-no" title="statement not covered" > return "Helper called";</span>
+ },
+ "with": <span class="fstat-no" title="function not covered" >function(context, options) {</span>
+<span class="cstat-no" title="statement not covered" > return options.fn(options.contexts[0][context]);</span>
+ }
+ };
+
+<span class="cstat-no" title="statement not covered" > var result = template(context, { helpers: helpers });</span>
+<span class="cstat-no" title="statement not covered" > equal(result, "Helper called");</span>
+ });
+
+ it("when inside a block in String mode, .. passes the appropriate context in the options hash to a block helper", <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > var template = CompilerContext.compile('{{#with dale}}{{#tomdale ../need dad.joke}}wot{{/tomdale}}{{/with}}', {stringParams: true});</span>
+
+<span class="cstat-no" title="statement not covered" > var helpers = {</span>
+ tomdale: <span class="fstat-no" title="function not covered" >function(desire, noun, options) {</span>
+<span class="cstat-no" title="statement not covered" > return "STOP ME FROM READING HACKER NEWS I " +</span>
+ options.contexts[0][desire] + " " + noun + " " +
+ options.fn(this);
+ },
+
+ "with": <span class="fstat-no" title="function not covered" >function(context, options) {</span>
+<span class="cstat-no" title="statement not covered" > return options.fn(options.contexts[0][context]);</span>
+ }
+ };
+
+<span class="cstat-no" title="statement not covered" > var result = template({</span>
+ dale: {},
+
+ need: 'need-a'
+ }, {helpers: helpers});
+
+<span class="cstat-no" title="statement not covered" > equals(result, "STOP ME FROM READING HACKER NEWS I need-a dad.joke wot", "Proper context variable output");</span>
+ });
+
+ it("with nested block ambiguous", <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > var template = CompilerContext.compile('{{#with content}}{{#view}}{{firstName}} {{lastName}}{{/view}}{{/with}}', {stringParams: true});</span>
+
+<span class="cstat-no" title="statement not covered" > var helpers = {</span>
+ 'with': <span class="fstat-no" title="function not covered" >function(options) {</span>
+<span class="cstat-no" title="statement not covered" > return "WITH";</span>
+ },
+ view: <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > return "VIEW";</span>
+ }
+ };
+
+<span class="cstat-no" title="statement not covered" > var result = template({}, {helpers: helpers});</span>
+<span class="cstat-no" title="statement not covered" > equals(result, "WITH");</span>
+ });
+
+ it('should handle DATA', <span class="fstat-no" title="function not covered" >function() {</span>
+<span class="cstat-no" title="statement not covered" > var template = CompilerContext.compile('{{foo @bar}}', { stringParams: true });</span>
+
+<span class="cstat-no" title="statement not covered" > var helpers = {</span>
+ foo: <span class="fstat-no" title="function not covered" >function(bar, options) {</span>
+<span class="cstat-no" title="statement not covered" > equal(bar, 'bar');</span>
+<span class="cstat-no" title="statement not covered" > equal(options.types[0], 'DATA');</span>
+<span class="cstat-no" title="statement not covered" > return 'Foo!';</span>
+ }
+ };
+
+<span class="cstat-no" title="statement not covered" > var result = template({}, { helpers: helpers });</span>
+<span class="cstat-no" title="statement not covered" > equal(result, 'Foo!');</span>
+ });
+});
+ </pre></td></tr>
+</table></pre>
+
+</div>
+<div class="footer">
+ <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Wed Aug 13 2014 23:50:21 GMT-0500 (CDT)</div>
+</div>
+
+<script src="../prettify.js"></script>
+
+<script src="https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js"></script>
+<script>
+
+ YUI().use('datatable', function (Y) {
+
+ var formatters = {
+ pct: function (o) {
+ o.className += o.record.get('classes')[o.column.key];
+ try {
+ return o.value.toFixed(2) + '%';
+ } catch (ex) { return o.value + '%'; }
+ },
+ html: function (o) {
+ o.className += o.record.get('classes')[o.column.key];
+ return o.record.get(o.column.key + '_html');
+ }
+ },
+ defaultFormatter = function (o) {
+ o.className += o.record.get('classes')[o.column.key];
+ return o.value;
+ };
+
+ function getColumns(theadNode) {
+ var colNodes = theadNode.all('tr th'),
+ cols = [],
+ col;
+ colNodes.each(function (colNode) {
+ col = {
+ key: colNode.getAttribute('data-col'),
+ label: colNode.get('innerHTML') || ' ',
+ sortable: !colNode.getAttribute('data-nosort'),
+ className: colNode.getAttribute('class'),
+ type: colNode.getAttribute('data-type'),
+ allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'
+ };
+ col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;
+ cols.push(col);
+ });
+ return cols;
+ }
+
+ function getRowData(trNode, cols) {
+ var tdNodes = trNode.all('td'),
+ i,
+ row = { classes: {} },
+ node,
+ name;
+ for (i = 0; i < cols.length; i += 1) {
+ name = cols[i].key;
+ node = tdNodes.item(i);
+ row[name] = node.getAttribute('data-value') || node.get('innerHTML');
+ row[name + '_html'] = node.get('innerHTML');
+ row.classes[name] = node.getAttribute('class');
+ //Y.log('Name: ' + name + '; Value: ' + row[name]);
+ if (cols[i].type === 'number') { row[name] = row[name] * 1; }
+ }
+ //Y.log(row);
+ return row;
+ }
+
+ function getData(tbodyNode, cols) {
+ var data = [];
+ tbodyNode.all('tr').each(function (trNode) {
+ data.push(getRowData(trNode, cols));
+ });
+ return data;
+ }
+
+ function replaceTable(node) {
+ if (!node) { return; }
+ var cols = getColumns(node.one('thead')),
+ data = getData(node.one('tbody'), cols),
+ table,
+ parent = node.get('parentNode');
+
+ table = new Y.DataTable({
+ columns: cols,
+ data: data,
+ sortBy: 'file'
+ });
+ parent.set('innerHTML', '');
+ table.render(parent);
+ }
+
+ Y.on('domready', function () {
+ replaceTable(Y.one('div.coverage-summary table'));
+ if (typeof prettyPrint === 'function') {
+ prettyPrint();
+ }
+ });
+ });
+</script>
+</body>
+</html>