dataschema.html revision 002fb6dfb3c0f32b2be7b241465918b1b520a323
<tr> <td>1/23/1999</td> <td>29e8548592d8c82</td> <td>12</td> <td>$150.00</td></tr><tr> <td>5/19/1999</td> <td>83849</td> <td>8</td> <td>$60.00</td></tr><tr> <td>8/9/1999</td> <td>11348</td> <td>1</td> <td>$34.99</td></tr><tr> <td>1/23/2000</td> <td>29e8548592d8c82</td> <td>10</td> <td>$1.00</td></tr><tr> <td>4/28/2000</td> <td>37892857482836437378273</td> <td>123</td> <td>$33.32</td></tr><tr> <td>1/23/2001</td> <td>83849</td> <td>5</td> <td>$15.00</td></tr><tr> <td>9/30/2001</td> <td>224747</td> <td>14</td> <td>$56.78</td></tr>
<tr> <td>1/23/1999</td> <td>29e8548592d8c82</td> <td>12</td> <td>$150.00</td></tr><tr> <td>5/19/1999</td> <td>83849</td> <td>8</td> <td>$60.00</td></tr><tr> <td>8/9/1999</td> <td>11348</td> <td>1</td> <td>$34.99</td></tr><tr> <td>1/23/2000</td> <td>29e8548592d8c82</td> <td>10</td> <td>$1.00</td></tr><tr> <td>4/28/2000</td> <td>37892857482836437378273</td> <td>123</td> <td>$33.32</td></tr><tr> <td>1/23/2001</td> <td>83849</td> <td>5</td> <td>$15.00</td></tr><tr> <td>9/30/2001</td> <td>224747</td> <td>44</td> <td>$56.78</td></tr>
<tr> <td>1/23/1999</td> <td>29e8548592d8c82</td> <td>1</td> <td>$150.00</td></tr><tr> <td>5/19/1999</td> <td>83849</td> <td>8</td> <td>$60.00</td></tr><tr> <td>8/9/1999</td> <td>11348</td> <td>1</td> <td>$34.99</td></tr><tr> <td>1/23/2000</td> <td>29e8548592d8c82</td> <td>10</td> <td>$1.00</td></tr><tr> <td>4/28/2000</td> <td>37892857482836437378273</td> <td>123</td> <td>$33.32</td></tr><tr> <td>1/23/2001</td> <td>83849</td> <td>5</td> <td>$15.00</td></tr><tr> <td>9/30/2001</td> <td>224747</td> <td>44</td> <td>$56.78</td></tr>
<tr> <td>1/23/1999</td> <td>29e8548592d8c82</td> <td>1</td> <td>$150.00</td></tr><tr> <td>5/19/1999</td> <td>83849</td> <td>8</td> <td>$60.00</td></tr><tr> <td>8/9/1999</td> <td>11348</td> <td>1</td> <td>$34.99</td></tr><tr> <td>1/23/2000</td> <td>29e8548592d8c82</td> <td>10</td> <td>$1.00</td></tr><tr> <td>4/28/2000</td> <td>37892857482836437378273</td> <td>123</td> <td>$33.32</td></tr><tr> <td>1/23/2001</td> <td>83849</td> <td>5</td> <td>$15.00</td></tr><tr> <td>9/30/2001</td> <td>224747</td> <td>14</td> <td>$56.78</td></tr>
filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min',
var ASSERT = Y.Assert,
ARRAYASSERT = Y.ArrayAssert,
OBJECTASSERT = Y.ObjectAssert,
btnRun = Y.one("#btnRun"),
myConsole = new Y.Console().render();
btnRun.set("disabled", false);
Y.on("click", function(){
var testJSON = new Y.Test.Case({
metaFields: {top:"top", nested:"second.nested"}
data_out = Y.DataSchema.JSON.apply(schema, data_in);
parser:Y.DataType.Number.parse },
data_out = Y.DataSchema.JSON.apply(schema, data_in);
data_out = Y.DataSchema.JSON.apply(schema, data_in);
data_out_1 = Y.DataSchema.JSON.apply(schema_1, data_in_1),
data_out_2 = Y.DataSchema.JSON.apply(schema_2, data_in_2),
resultFields: [{ key: "name", locator: "value" }, { key: "mood", locator: "notes.mood"}]
data_out_3 = Y.DataSchema.JSON.apply(schema_3, data_in_3);
{ key: "First Name", locator: "president.fname" },
{ key: "Last Name", locator: "president.lastname" }
data_out = Y.DataSchema.JSON.apply(schema, data_in);
metaFields: {metaTotal:"response['meta-total']", metaMessage:"response['data array'][1].response.message"},
"['customer.data']['alert(\'id\')']",
position: "array.item.0",
"customer.data": {
"customer.data": {
position: "array.item.1",
data_out = Y.DataSchema.JSON.apply(schema, data_in);
ASSERT.areSame(10, data_out.results[0]["['customer.data']['alert(\'id\')']"], "Expected first id.");
ASSERT.areSame("234-5678", data_out.results[1]["['customer.data']['phone/email']"], "Expected second phone/email.");
ASSERT.areSame("Fido", data_out.results[1]["['array-pets'][0].name"], "Expected nested array item data.");
data_out = Y.DataSchema.JSON.apply(schema, data_in);
ASSERT.areSame("orange", data_out.results[data_out.results.length-1].name, "Expected last result.");
resultFields: ["fruit.name","cal[0].ries"]
{"fruit.name":"apple", "cal[0].ries":70},
{"fruit.name":"banana", "cal[0].ries":70},
{"fruit.name":"orange", "cal[0].ries":90}
data_out = Y.DataSchema.JSON.apply(schema, data_in);
data_out = Y.DataSchema.JSON.apply(schema, data_in);
{ key: 'difficulty', locator: 'difficulty.level' }
data_out = Y.DataSchema.JSON.apply(schema, data_in);
ASSERT.areSame(data_out.results[1].name, "Yeti", "Expect current locators work with nested schemas");
ASSERT.areSame(data_out.results[1].strategy.results[0].description, "Must be in Lojban", "Expected nested simple locators");
data_out = Y.DataSchema.JSON.apply(schema, data_in);
data_out = Y.DataSchema.JSON.apply(schema, data_in);
data_out = Y.DataSchema.JSON.apply(schema, data_in);
data_out = Y.DataSchema.JSON.apply(schema, data_in);
var testXML = new Y.Test.Case({
metaFields: {rootatt:{parser:Y.DataType.Number.parse, locator:"/myroot/@rootatt"}, topnode:"//top", nestedatt:"//second/@nested"}
data_in = Y.DataType.XML.parse("<myroot rootatt='0'><top>topvalue</top><second nested='nestedvalue' /><item type='foo'><name>Abc</name><rank>0</rank></item><item type='bar'><name>Def</name><rank>1</rank></item><item type='bat'><name>Ghi</name><rank>2</rank></item></myroot>"),
data_out = Y.DataSchema.XML.apply(schema, data_in);
resultFields: [{key:"type", locator:"@type"}, {key:"rank", parser:Y.DataType.Number.parse}, "name"]
data_in = Y.DataType.XML.parse("<myroot><item type='foo'><name>Abc</name><rank>0</rank></item><item type='bar'><name>Def</name><rank>1</rank></item><item type='bat'><name>Ghi</name><rank>2</rank></item></myroot>"),
data_out = Y.DataSchema.XML.apply(schema, data_in);
resultFields: [{key:"type", locator:"@type"}, {key:"rank", parser:Y.DataType.Number.parse}, "name"]
data_in = Y.DataType.XML.parse("<myroot><otheritems><item type='other'><name>Test</name><rank>-1</rank></item></otheritems><items><item type='foo'><name>Abc</name><rank>0</rank></item><item type='bar'><name>Def</name><rank>1</rank></item><item type='bat'><name>Ghi</name><rank>2</rank></item></items></myroot>"),
data_out = Y.DataSchema.XML.apply(schema, data_in);
metaFields: {rootatt:{parser:Y.DataType.Number.parse, locator:"/myroot/@rootatt"}, topnode:"//top", nestedatt:"//second/@nested"},
resultFields: [{key:"type", locator:"@type"}, {key:"rank", parser:Y.DataType.Number.parse}, "name", {key:"subnameatt", locator:"subitem/name/@type"}, {key:"age", locator:"subitem/age", parser:"number"}]
data_in = Y.DataType.XML.parse("<myroot rootatt='5'><top>topvalue</top><second nested='nestedsecond' /><allitems><livehere><item type='foo'><name type='nametype0'>Abc</name><rank>0</rank><subitem><name type='subnametype0'>subABC</name><age>10</age></subitem></item><item type='bar'><name type='nametype1'>Def</name><rank>1</rank><subitem><name type='subnametype1'>subDEF</name><age>11</age></subitem></item><item type='bat'><name type='nametype2'>Ghi</name><rank>2</rank><subitem><name type='subnametype2'>subGHI</name><age>12</age></subitem></item></livehere></allitems></myroot>"),
data_out = Y.DataSchema.XML.apply(schema, data_in);
ASSERT.areSame("subnametype0", data_out.results[0].subnameatt, "Expected first subitem name attribute.");
ASSERT.areSame("subnametype2", data_out.results[2].subnameatt, "Expected last subitemnameattribute.");
{key:"rank", parser:Y.DataType.Number.parse},
data_in = Y.DataType.XML.parse("<myroot><item type='foo'><attributes><attribute units='foo1'>bar1</attribute><attribute units='foo2'>bar2</attribute></attributes><name>Abc</name><rank>0</rank></item><item type='bar'><attributes><attribute units='foo3'>bar3</attribute><attribute units='foo4'>bar4</attribute></attributes><name>Def</name><rank>1</rank></item><item type='bat'><name>Ghi</name><rank>2</rank></item></myroot>"),
data_out = Y.DataSchema.XML.apply(schema, data_in);
resultFields: ["type", {key:"rank", parser:Y.DataType.Number.parse}, "name"]
data_in = Y.DataType.XML.parse("<root><item type='foo'><name>Abc</name><rank>1</rank></item><item type='bar'><name>Def</name><rank>2</rank></item></root>"),
data_out = Y.DataSchema.XML.apply(schema, data_in);
schema.resultsListLocator = "item";
data_out = Y.DataSchema.XML.apply(schema, data_in);
var testHTML = new Y.Test.Case({
{key:"quantity", locator:"td[3]", parser:Y.DataType.Number.parse},
data_out = Y.DataSchema.XML.apply(schema, data_in);
ASSERT.areSame(14, data_out.results[data_out.results.length-1]["quantity"], "Expected last result.");
{key:"quantity", locator:"td[3]", parser:Y.DataType.Number.parse},
Y.all("#multipletbody tbody tr").each(function(n){
data_out = Y.DataSchema.XML.apply(schema, data_in);
ASSERT.areSame(14, data_out.results[data_out.results.length-1]["quantity"], "Expected last result.");
var testArray = new Y.Test.Case({
data_out = Y.DataSchema.Array.apply(schema, data_in);
data_out = Y.DataSchema.Array.apply(schema, data_in);
data_out = Y.DataSchema.Array.apply(schema, data_in);
data_out = Y.DataSchema.Array.apply(schema, data_in);
data_out = Y.DataSchema.Array.apply(schema, data_in);
data_out = Y.DataSchema.Array.apply(schema, data_in);
var testText = new Y.Test.Case({
data_out = Y.DataSchema.Text.apply(schema, data_in);
data_out = Y.DataSchema.Text.apply(schema, data_in);
data_out = Y.DataSchema.Text.apply(schema, data_in);
data_out = Y.DataSchema.Text.apply(schema, data_in);
var suite = new Y.Test.Suite({name:"DataSchema Test Suite"});
suite.add(testJSON);
suite.add(testXML);
suite.add(testHTML);
suite.add(testArray);
suite.add(testText);
Y.Test.Runner.setName("DataSchema Test Runner");
Y.Test.Runner.add(suite);