substitute.html revision 583b6463b1b1af52ed4ff0bfa66a6fbf8658c5b3
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<script type="text/javascript" src="/build/yui/yui.js"></script>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore(function() {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore filter: "debug",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore useConsole: true,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // logInclude: ['event', 'test']
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore //logExclude: ['Dom', 'Selector', 'Node', 'attribute']
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore logExclude: {Dom:true,
583b6463b1b1af52ed4ff0bfa66a6fbf8658c5b3Adam Moore Selector:true, Node:true, attribute:true, event:true, base:true, widget:true}
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore }).use("dump", "test", "console", "event-custom", function(Y) {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var button = Y.get('#btnRun'),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ObjectAssert = Y.ObjectAssert;
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // Set up the page
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore button.set("disabled", false);
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.on("click", function() {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var myConsole = new Y.Console().render();
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var testSubstitute= new Y.Test.Case({
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore name: "Substitute tests",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore test_substitute: function() {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ////////////////////////////////////////////////////////////////////////////////
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var param = {domain: 'valvion.com',
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore media: 'http://media.{domain}/', /* nested */
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore contextdomain: { context1: 'context{domain}', context2: 'yahoo.com' }, /* the value is an object, we will use a custom function to extract the correct data */
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore contextmedia: 'http://contextmedia.{contextdomain context1}/'};
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // standard replace, nested
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.areEqual(url, "http://media.valvion.com/logo.gif");
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // If the replacement value is an object, use the meta info as a key to extract the
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // correct data. Otherwise just return the value.
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore function multipleChoice(key, val, meta) {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore return (Y.Lang.isObject(val)) ? val[meta] : val;
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // "random data" is not used since the value for the contextmedia key is a string.
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // contextdomain uses "context1" as a key to expand the string correctly
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore url = Y.substitute("{contextmedia random data}logo.gif", param, multipleChoice);
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.areEqual(url, "http://contextmedia.contextvalvion.com/logo.gif");
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ////////////////////////////////////////////////////////////////////////////////
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level1_1: 1.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level1_2: 1.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_1: 2.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_2: 2.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level3_1: 3.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level3_2: 3.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level3_3: 3.3,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level3_4: 3.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_4: 2.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level1_4: 1.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.substitute("{testobj 0}", { testobj: obj }),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "{level1_1 => 1.1, level1_2 => 1.2, level1_3 => {...}, level1_4 => 1.4}",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed one level object dump"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.substitute("{testobj 1}", { testobj: obj }),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "{level1_1 => 1.1, level1_2 => 1.2, level1_3 => {level2_1 => 2.1, level2_2 => 2.2, level2_3 => {...}, level2_4 => 2.4}, level1_4 => 1.4}",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed two level object dump"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "{testobj 10}", { testobj: obj }),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "{level1_1 => 1.1, level1_2 => 1.2, level1_3 => {level2_1 => 2.1, level2_2 => 2.2, level2_3 => {level3_1 => 3.1, level3_2 => 3.2, level3_3 => 3.3, level3_4 => 3.4}, level2_4 => 2.4}, level1_4 => 1.4}",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed deep object dump"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.substitute("{testarr 1}", { testarr: arr }),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "[1.1, 1.2, [2.1, 2.2, {...}, 2.4], 1.4]",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed two level array dump"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_1: 2.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_2: 2.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_4: 2.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore function(){}
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var result = Y.substitute("{testmix 1}", { testmix: mix });
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore (result.indexOf("GMT" > -1)) ? true : false,
583b6463b1b1af52ed4ff0bfa66a6fbf8658c5b3Adam Moore "failed two level mixed object with a date (date should have produced an output with GMT in it)"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ////////////////////////////////////////////////////////////////////////////////
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var tostr = {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom1_1: 1.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom1_2: 1.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom1_3: {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom2_1: 2.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom2_2: 2.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom2_3: {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom3_1: 3.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom3_2: 3.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom3_3: 3.3,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom3_4: 3.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom2_4: 2.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom1_4: 1.4,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore toString: function() {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore return "custom toString executed";
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.substitute("{customtostr 1}", { customtostr: tostr }),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "custom toString executed",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed: custom toString should have been used"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.substitute("{customtostr dump 1}", { customtostr: tostr }),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "{custom1_1 => 1.1, custom1_2 => 1.2, custom1_3 => {custom2_1 => 2.1, custom2_2 => 2.2, custom2_3 => {...}, custom2_4 => 2.4}, custom1_4 => 1.4, toString => f(){...}}",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed: custom toString should NOT have been used because the dump keyword should override it"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ////////////////////////////////////////////////////////////////////////////////
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.Test.Runner.add(testSubstitute);