dataschema.html revision 8947d1099a91880ec4e5be929041b1cebb9a3a55
369N/A<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
5706N/A<html>
369N/A<head>
369N/A<title>DataSchema Tests</title>
369N/A<script type="text/javascript" src="/build/yui/yui.js"></script>
369N/A<script type="text/javascript" src="/build/dataschema/dataschema-debug.js"></script>
369N/A</head>
369N/A
369N/A<body class="yui3-skin-sam">
369N/A<h1>DataSchema Tests</h1>
369N/A<p><input type="button" value="Run Tests" id="btnRun" disabled=true></p>
369N/A
369N/A<div id="markup">
369N/A <table id="singletbody">
369N/A <thead>
369N/A <tr>
369N/A <th>Due Date</th>
369N/A <th>Account Number</th>
369N/A <th>Quantity</th>
369N/A <th>Amount Due</th>
369N/A </tr>
369N/A </thead>
369N/A <tbody>
369N/A <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>
369N/A </tbody>
369N/A </table>
369N/A <table id="multipletbody">
369N/A <thead>
369N/A <tr>
369N/A <th>Due Date</th>
369N/A <th>Account Number</th>
369N/A <th>Quantity</th>
369N/A <th>Amount Due</th>
369N/A </tr>
369N/A </thead>
369N/A <tbody>
369N/A <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>
369N/A </tbody>
369N/A <tbody>
369N/A <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>
369N/A </tbody>
369N/A <tbody>
369N/A <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>
369N/A </tbody>
369N/A </table>
369N/A</div>
369N/A
369N/A<script type="text/javascript">
369N/A
736N/A(function() {
736N/A YUI({
369N/A base: "/build/",
369N/A filter: "raw",
369N/A logInclude:{"TestRunner":true},
2787N/A useConsole: true
2787N/A }).use("console", "test", "dump", "dataschema", "datatype", function(Y) {
369N/A
369N/A // Set up the page
369N/A var ASSERT = Y.Assert,
369N/A ARRAYASSERT = Y.ArrayAssert,
1892N/A OBJECTASSERT = Y.ObjectAssert,
1892N/A btnRun = Y.get("#btnRun"),
369N/A myConsole = new Y.Console().render();
369N/A
369N/A btnRun.set("disabled", false);
736N/A Y.on("click", function(){
369N/A Y.Test.Runner.run();
369N/A }, btnRun);
369N/A
4659N/A
4659N/A var testJSON = new Y.Test.Case({
4659N/A name: "JSON Tests",
369N/A
369N/A testJSONMeta: function() {
369N/A var schema = {
369N/A metaFields: {top:"top", nested:"second.nested"}
369N/A },
4659N/A data_in = {
4659N/A top: "foo",
369N/A second: {nested: "bar"}
2584N/A },
2584N/A data_out = Y.DataSchema.JSON.apply(schema, data_in);
2584N/A
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A ASSERT.areSame("foo", data_out.meta.top, "Expected first meta.");
369N/A ASSERT.areSame("bar", data_out.meta.nested, "Expected second meta.");
369N/A ASSERT.isArray(data_out.results, "Expected results property.");
369N/A ASSERT.areSame(0, data_out.results.length, "Expected zero results.");
369N/A },
369N/A
369N/A testJSONResults: function() {
369N/A var schema = {
369N/A resultListLocator: "response",
369N/A resultFields: ["name", {key:"number", parser:Y.DataType.Number.parse}, "letter"]
369N/A },
369N/A data_in = {
4659N/A response: [
4659N/A {name: "alpha", number: "0", letter: "a"},
4659N/A {name: "beta", number: "1", letter: "b"},
4659N/A {name: "gamma", number: "2", letter: "c"}
4659N/A ]
4659N/A },
4659N/A data_out = Y.DataSchema.JSON.apply(schema, data_in);
369N/A
369N/A ASSERT.isArray(data_out.results, "Expected results property.");
369N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
369N/A ASSERT.areSame("alpha", data_out.results[0].name, "Expected first result.");
369N/A ASSERT.areSame("gamma", data_out.results[2].name, "Expected last result.");
369N/A ASSERT.areSame(0, data_out.results[0].number, "Expected first number to be parsed.");
369N/A ASSERT.areSame(2, data_out.results[2].number, "Expected last number to be parsed.");
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A },
4659N/A
4659N/A testJSONComplexLocators: function() {
4659N/A var schema = {
4659N/A metaFields: {metaTotal:"response['meta-total']", metaMessage:"response['data array'][1].response.message"},
4659N/A resultListLocator:"response['data array'][0].response['i t e m s']",
4659N/A resultFields: [
4659N/A "name",
4659N/A "['customer.data']['alert(\'id\')']",
4659N/A "['customer.data']['phone/email']",
369N/A "['array-pets'][0].name",
369N/A "['array-pets']"
369N/A ]
369N/A },
369N/A data_in = {
369N/Arequest: "orig request", response: { "meta-total": 3, "data array" : [{ position: "array.item.0", "response": { "i t e m s": [ { /* result 0 */ name: "Bob", "customer.data": { "alert('id')":10, "phone/email": "123-4567", "catch":true }, "array-pets": [ { /* pet 0 */ "name":"Brutus", "breed": "bulldog" }, { /* pet 1 */ "name":"Bobo", "breed": "bernese" } ] }, { /* result 1 */ name: "Fran", "customer.data": { "alert('id')":11, "phone/email": "234-5678", "catch":false}, "array-pets": [ { /* pet 0 */ "name":"Fido", "breed": "french poodle" } ] } ] } }, { position: "array.item.1", "response": { "message": { type: "xyz", error: false } } }], metaid: { id:1234, date: new Date() } } },
369N/A data_out = Y.DataSchema.JSON.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A ASSERT.areSame(3, data_out.meta.metaTotal, "Expected meta total.");
4659N/A ASSERT.areSame("xyz", data_out.meta.metaMessage.type, "Expected nested meta message type.");
4659N/A ASSERT.areSame(false, data_out.meta.metaMessage.error, "Expected nested meta message error.");
4659N/A ASSERT.isArray(data_out.results, "Expected results property.");
4659N/A ASSERT.areSame(2, data_out.results.length, "Expected 2 results.");
4659N/A ASSERT.areSame(10, data_out.results[0]["['customer.data']['alert(\'id\')']"], "Expected first id.");
4659N/A ASSERT.areSame("234-5678", data_out.results[1]["['customer.data']['phone/email']"], "Expected second phone/email.");
4659N/A ASSERT.areSame("Fido", data_out.results[1]["['array-pets'][0].name"], "Expected nested array item data.");
5706N/A ASSERT.isArray(data_out.results[0]["['array-pets']"], "Expected array.");
5706N/A ASSERT.areSame(2, data_out.results[0]["['array-pets']"].length, "Expected array length.");
5706N/A },
369N/A
369N/A testJSONNested: function() {
4659N/A var schema = {resultListLocator: "reference[1].fruit",
4659N/A resultFields: ["name","calories"]
369N/A },
369N/A data_in = {
369N/A "profile":{
369N/A "current":160,
369N/A "target":150
369N/A },
369N/A "reference": [
2584N/A {
369N/A "category":"exercise",
369N/A "type":"expenditure",
369N/A "activities":[
369N/A {"name":"biking", "calories":550},
369N/A {"name":"golf", "calories":1000},
369N/A {"name":"running", "calories":650},
369N/A {"name":"swimming", "calories":650},
369N/A {"name":"walking", "calories":225}
369N/A ]
369N/A },
736N/A {
736N/A "category":"nutrition",
369N/A "type":"intake",
369N/A "fruit":[
369N/A {"name":"apple", "calories":70},
2787N/A {"name":"banana", "calories":70},
2787N/A {"name":"orange", "calories":90},
2787N/A ],
2787N/A "vegetables":[
2787N/A {"name":"baked potato", "calories":150},
369N/A {"name":"broccoli", "calories":50},
369N/A {"name":"green beans", "calories":30}
369N/A ]
369N/A }
369N/A ],
369N/A "program": [
369N/A {
369N/A "category":"exercise",
369N/A "schedule":[
369N/A {"day":"sunday", "activity":"swimming"},
369N/A {"day":"monday", "activity":"running"},
369N/A {"day":"tuesday", "activity":"biking"},
369N/A {"day":"wednesday", "activity":"running"},
369N/A {"day":"thursday", "activity":"swimming"},
369N/A {"day":"friday", "activity":"running"},
369N/A {"day":"saturday", "activity":"golf"}
369N/A ]
369N/A },
4659N/A {
4659N/A "category":"diet",
4659N/A "schedule":[
4659N/A ]
4659N/A }
4659N/A ]
4659N/A },
4659N/A data_out = Y.DataSchema.JSON.apply(schema, data_in);
4659N/A
4659N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
4659N/A },
4659N/A
4659N/A testJSONError: function() {
4659N/A var schema = {
4659N/A resultListLocator: "response",
4659N/A resultFields: ["name", "number", "letter"]
4659N/A },
4659N/A data_in = 123,
4659N/A data_out = Y.DataSchema.JSON.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A //OBJECTASSERT.isEmpty(data_out.meta, "Expected empty meta.");
4659N/A ARRAYASSERT.isEmpty(data_out.results, "Expected empty results.");
4659N/A ASSERT.isObject(data_out.error, "Expected JSON parse error.");
4659N/A
4659N/A data_in = {123:123, 456:456};
4659N/A data_out = Y.DataSchema.JSON.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A //OBJECTASSERT.isEmpty(data_out.meta, "Expected empty meta.");
4659N/A ARRAYASSERT.isEmpty(data_out.results, "Expected empty results.");
4659N/A ASSERT.isObject(data_out.error, "Expected results error.");
4659N/A
4659N/A data_in = {"response":"abc"};
4659N/A data_out = Y.DataSchema.JSON.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A //OBJECTASSERT.isEmpty(data_out.meta, "Expected empty meta.");
4659N/A ARRAYASSERT.isEmpty(data_out.results, "Expected empty results.");
4659N/A ASSERT.isObject(data_out.error, "Expected fields error.");
4659N/A
4659N/A data_in = {"query":[
4659N/A {name: "alpha", number: "0", letter: "a"},
4659N/A {name: "beta", number: "1", letter: "b"},
4659N/A {name: "gamma", number: "2", letter: "c"}
4659N/A ]};
4659N/A schema.resultListLocator = "ResultSet.Result";
4659N/A
4659N/A data_out = Y.DataSchema.JSON.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A //OBJECTASSERT.isEmpty(data_out.meta, "Expected empty meta.");
4659N/A ARRAYASSERT.isEmpty(data_out.results, "Expected empty results.");
4659N/A ASSERT.isObject(data_out.error, "Expected results error.");
4659N/A }
4659N/A });
4659N/A
4659N/A var testXML = new Y.Test.Case({
4659N/A name: "XML Tests",
4659N/A
4659N/A testXMLMeta: function() {
4659N/A var schema = {
4659N/A metaFields: {rootatt:{parser:Y.DataType.Number.parse, locator:"/myroot/@rootatt"}, topnode:"//top", nestedatt:"//second/@nested"}
4659N/A },
4659N/A 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>"),
4659N/A data_out = Y.DataSchema.XML.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A ASSERT.areSame(0, data_out.meta.rootatt, "Expected rootatt.");
4659N/A ASSERT.areSame("topvalue", data_out.meta.topnode, "Expected topvalue.");
4659N/A ASSERT.areSame("nestedvalue", data_out.meta.nestedatt, "Expected nestedvalue.");
4659N/A ASSERT.isArray(data_out.results, "Expected results property.");
4659N/A ASSERT.areSame(0, data_out.results.length, "Expected zero results.");
4659N/A },
4659N/A
4659N/A testXMLResults: function() {
4659N/A var schema = {
4659N/A resultListLocator: "item",
4659N/A resultFields: [{key:"type", locator:"@type"}, {key:"rank", parser:Y.DataType.Number.parse}, "name"]
4659N/A },
4659N/A 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>"),
4659N/A data_out = Y.DataSchema.XML.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isArray(data_out.results, "Expected results property.");
4659N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
4659N/A ASSERT.areSame("foo", data_out.results[0].type, "Expected first result.");
4659N/A ASSERT.areSame("bat", data_out.results[2].type, "Expected last result.");
4659N/A ASSERT.areSame(0, data_out.results[0].rank, "Expected first number to be parsed.");
4659N/A ASSERT.areSame(2, data_out.results[2].rank, "Expected last number to be parsed.");
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A },
4659N/A
4659N/A testXMLXPathResults: function() {
4659N/A var schema = {
4659N/A resultListLocator: "//items/item",
4659N/A resultFields: [{key:"type", locator:"@type"}, {key:"rank", parser:Y.DataType.Number.parse}, "name"]
4659N/A },
4659N/A 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>"),
4659N/A data_out = Y.DataSchema.XML.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isArray(data_out.results, "Expected results property.");
4659N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
4659N/A ASSERT.areSame("foo", data_out.results[0].type, "Expected first result.");
4659N/A ASSERT.areSame("bat", data_out.results[2].type, "Expected last result.");
4659N/A ASSERT.areSame(0, data_out.results[0].rank, "Expected first number to be parsed.");
4659N/A ASSERT.areSame(2, data_out.results[2].rank, "Expected last number to be parsed.");
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A },
4659N/A
4659N/A testXMLComplex: function() {
4659N/A var schema = {
4659N/A metaFields: {rootatt:{parser:Y.DataType.Number.parse, locator:"/myroot/@rootatt"}, topnode:"//top", nestedatt:"//second/@nested"},
4659N/A resultListLocator: "item",
4659N/A 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"}]
4659N/A },
4659N/A 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>"),
4659N/A data_out = Y.DataSchema.XML.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A ASSERT.areSame(5, data_out.meta.rootatt, "Expected rootatt.");
4659N/A ASSERT.areSame("topvalue", data_out.meta.topnode, "Expected topvalue.");
4659N/A ASSERT.areSame("nestedsecond", data_out.meta.nestedatt, "Expected nestedvalue.");
4659N/A ASSERT.isArray(data_out.results, "Expected results property.");
4659N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
4659N/A ASSERT.areSame("foo", data_out.results[0].type, "Expected first type att.");
4659N/A ASSERT.areSame("bat", data_out.results[2].type, "Expected last type att.");
4659N/A ASSERT.areSame(0, data_out.results[0].rank, "Expected first number to be parsed.");
4659N/A ASSERT.areSame(2, data_out.results[2].rank, "Expected last number to be parsed.");
4659N/A ASSERT.areSame("subnametype0", data_out.results[0].subnameatt, "Expected first subitem name attribute.");
4659N/A ASSERT.areSame("subnametype2", data_out.results[2].subnameatt, "Expected last subitemnameattribute.");
4659N/A ASSERT.areSame(10, data_out.results[0].age, "Expected first age.");
4659N/A ASSERT.areSame(12, data_out.results[2].age, "Expected last age.");
4659N/A },
4659N/A
4659N/A testXMLNestedSchema: function() {
4659N/A var schema = {
4659N/A resultListLocator: "item",
4659N/A resultFields: [
4659N/A {key:"type", locator:"@type"},
4659N/A {key:"rank", parser:Y.DataType.Number.parse},
4659N/A "name",
4659N/A {key:'attributes', schema: {
4659N/A resultListLocator: 'attribute',
4659N/A resultFields: [
4659N/A {key:"units", locator:"@units"},
4659N/A {key:"value", locator:"."}
4659N/A ]
5706N/A }}
4659N/A ]
4659N/A },
4659N/A 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>"),
4659N/A data_out = Y.DataSchema.XML.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isArray(data_out.results, "Expected results property.");
4659N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
4659N/A ASSERT.areSame("foo", data_out.results[0].type, "Expected first result.");
4659N/A ASSERT.areSame("bat", data_out.results[2].type, "Expected last result.");
4659N/A ASSERT.areSame(0, data_out.results[0].rank, "Expected first number to be parsed.");
4659N/A ASSERT.areSame(2, data_out.results[2].rank, "Expected last number to be parsed.");
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A
4659N/A ASSERT.isArray(data_out.results[0].attributes, "Expected attributes property.");
4659N/A ASSERT.areSame(2, data_out.results[0].attributes.length, "Expected 2 attributes.");
4659N/A ASSERT.areSame("foo1", data_out.results[0].attributes[0].units, "Expected first result.");
4659N/A ASSERT.areSame("bar2", data_out.results[0].attributes[1].value, "Expected last result.");
4659N/A
4659N/A ASSERT.isArray(data_out.results[2].attributes, "Expected attributes property.");
4659N/A ASSERT.areSame(0, data_out.results[2].attributes.length, "Expected 0 attributes.");
4659N/A },
4659N/A
4659N/A testXMLError: function() {
4659N/A var schema = {
4659N/A resultListLocator: "none",
4659N/A resultFields: ["type", {key:"rank", parser:Y.DataType.Number.parse}, "name"]
4659N/A },
4659N/A 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>"),
4659N/A data_out = Y.DataSchema.XML.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A OBJECTASSERT.ownsNoKeys(data_out.meta, "Expected empty meta.");
4659N/A ARRAYASSERT.isEmpty(data_out.results, "Expected empty results.");
4659N/A ASSERT.isObject(data_out.error, "Expected XML parse error.");
4659N/A
4659N/A data_out = null;
4659N/A data_in = [1,2,3];
4659N/A schema.resultsListLocator = "item";
4659N/A data_out = Y.DataSchema.XML.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
5706N/A OBJECTASSERT.ownsNoKeys(data_out.meta, "Expected empty meta.");
4659N/A ARRAYASSERT.isEmpty(data_out.results, "Expected empty results.");
4659N/A ASSERT.isObject(data_out.error, "Expected XML parse error.");
5706N/A }
4659N/A });
4659N/A
4659N/A var testHTML = new Y.Test.Case({
4659N/A name: "HTML Tests",
4659N/A
4659N/A testSingleTbody: function() {
4659N/A var schema = {
4659N/A resultListLocator: "tr",
4659N/A resultFields: [
4659N/A {key:"due-date", locator:"td[1]"},
4659N/A {key:"account-number", locator:"td[2]"},
4659N/A {key:"quantity", locator:"td[3]", parser:Y.DataType.Number.parse},
4659N/A {key:"amount-due", locator:"td[4]"}
4659N/A ]
369N/A },
369N/A data_in = Y.Node.getDOMNode(Y.get("#singletbody tbody")),
369N/A data_out = Y.DataSchema.XML.apply(schema, data_in);
2584N/A
369N/A ASSERT.isArray(data_out.results, "Expected results property.");
369N/A ASSERT.areSame(7, data_out.results.length, "Expected 7 results.");
369N/A ASSERT.areSame(12, data_out.results[0]["quantity"], "Expected first result.");
369N/A ASSERT.areSame(14, data_out.results[data_out.results.length-1]["quantity"], "Expected last result.");
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A },
369N/A
369N/A testMultipleTbody: function() {
369N/A var schema = {
369N/A resultListLocator: "tr",
369N/A resultFields: [
369N/A {key:"due-date", locator:"td[1]"},
369N/A {key:"account-number", locator:"td[2]"},
369N/A {key:"quantity", locator:"td[3]", parser:Y.DataType.Number.parse},
369N/A {key:"amount-due", locator:"td[4]"}
369N/A ]
369N/A },
4659N/A data_in = document.createDocumentFragment().appendChild(document.createElement("tbody"));
369N/A Y.all("#multipletbody tbody tr").each(function(n){
369N/A data_in.appendChild(Y.Node.getDOMNode(n).cloneNode(true));
369N/A }),
2584N/A data_out = Y.DataSchema.XML.apply(schema, data_in);
4659N/A
369N/A ASSERT.isArray(data_out.results, "Expected results property.");
369N/A ASSERT.areSame(21, data_out.results.length, "Expected 21 results.");
369N/A ASSERT.areSame(12, data_out.results[0]["quantity"], "Expected first result.");
369N/A ASSERT.areSame(14, data_out.results[data_out.results.length-1]["quantity"], "Expected last result.");
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A }
369N/A });
369N/A
369N/A var testArray = new Y.Test.Case({
369N/A name: "Array Tests",
2584N/A
369N/A testSimpleArrayResults: function() {
369N/A var schema = {
369N/A resultFields: [{key:"type"}, {key:"age", parser:"number"}, "name"]
369N/A },
4659N/A data_in = ["a","b","c"],
369N/A data_out = Y.DataSchema.Array.apply(schema, data_in);
369N/A
736N/A ASSERT.isArray(data_out.results, "Expected results property.");
2584N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
736N/A ASSERT.areSame("a", data_out.results[0], "Expected first string.");
369N/A ASSERT.areSame("c", data_out.results[2], "Expected last string.");
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A },
2584N/A
369N/A testNestedArrayResults: function() {
369N/A var schema = {
369N/A resultFields: [{key:"type"}, {key:"age", parser:"number"}, "name"]
369N/A },
736N/A data_in = [["a","0","c"], ["d","1","f"], ["g","-2","i"]],
369N/A data_out = Y.DataSchema.Array.apply(schema, data_in);
369N/A
369N/A ASSERT.isArray(data_out.results, "Expected results property.");
369N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
369N/A ASSERT.areSame("a", data_out.results[0].type, "Expected first type.");
369N/A ASSERT.areSame("g", data_out.results[2].type, "Expected last type.");
369N/A ASSERT.areSame(0, data_out.results[0].age, "Expected first age.");
369N/A ASSERT.areSame(-2, data_out.results[2].age, "Expected last age.");
369N/A ASSERT.areSame("c", data_out.results[0].name, "Expected first name.");
369N/A ASSERT.areSame("i", data_out.results[2].name, "Expected last name.");
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A },
369N/A
369N/A testObjectArrayResults: function() {
369N/A var schema = {
369N/A resultFields: [{key:"type"}, {key:"age", parser:"number"}, "name"]
369N/A },
369N/A data_in = [{type:"a",age:0,name:"c"},{type:"d",age:1,name:"f"},{type:"g",age:-1,name:"i"}],
369N/A data_out = Y.DataSchema.Array.apply(schema, data_in);
369N/A
369N/A ASSERT.isArray(data_out.results, "Expected results property.");
369N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
369N/A ASSERT.areSame("a", data_out.results[0].type, "Expected first type.");
369N/A ASSERT.areSame("g", data_out.results[2].type, "Expected last type.");
369N/A ASSERT.areSame(0, data_out.results[0].age, "Expected first age.");
369N/A ASSERT.areSame(-1, data_out.results[2].age, "Expected last age.");
369N/A ASSERT.areSame("c", data_out.results[0].name, "Expected first name.");
369N/A ASSERT.areSame("i", data_out.results[2].name, "Expected last name.");
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A },
369N/A
369N/A testComboArrayResults: function() {
4659N/A var schema = {
369N/A resultFields: [{key:"type"}, {key:"age", parser:"number"}, "name"]
369N/A },
369N/A data_in = [["a","0","c"], "abc", {type:"g",age:-1,name:"i"}],
369N/A data_out = Y.DataSchema.Array.apply(schema, data_in);
4659N/A
369N/A ASSERT.isArray(data_out.results, "Expected results property.");
369N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
369N/A ASSERT.areSame("a", data_out.results[0].type, "Expected first type.");
369N/A ASSERT.areSame("g", data_out.results[2].type, "Expected last type.");
369N/A ASSERT.areSame(0, data_out.results[0].age, "Expected first age.");
369N/A ASSERT.areSame(-1, data_out.results[2].age, "Expected last age.");
4659N/A ASSERT.areSame("c", data_out.results[0].name, "Expected first name.");
369N/A ASSERT.areSame("i", data_out.results[2].name, "Expected last name.");
369N/A ASSERT.areSame("abc", data_out.results[1], "Expected second string.");
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A },
369N/A
369N/A testArrayError: function() {
4659N/A var schema = {
369N/A resultFields: [{key:"type"}, {key:"age", parser:"number"}, "name"]
369N/A },
369N/A data_in = "abc",
369N/A data_out = Y.DataSchema.Array.apply(schema, data_in);
369N/A
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A OBJECTASSERT.ownsNoKeys(data_out.meta, "Expected empty meta.");
369N/A ARRAYASSERT.isEmpty(data_out.results, "Expected empty results.");
369N/A ASSERT.isObject(data_out.error, "Expected array parse error.");
369N/A
369N/A data_in = [["a","0","c"], function() {}, {type:"g",age:-1,name:"h"}];
369N/A data_out = Y.DataSchema.Array.apply(schema, data_in);
369N/A
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A ASSERT.isArray(data_out.results, "Expected results property.");
369N/A ASSERT.areSame(null, data_out.results[1], "Expected null result.");
369N/A }
369N/A });
369N/A
369N/A var testText = new Y.Test.Case({
369N/A name: "Text Tests",
369N/A
4659N/A testTextResultsAndFields: function() {
369N/A var schema = {
2584N/A resultDelimiter: "\n",
369N/A fieldDelimiter: "\t",
369N/A resultFields: [{key:"type"}, {key:"age", parser:"number"}, "name"]
369N/A },
369N/A data_in = "foo\t0\tabc\nbar\t1\tdef\nbat\t-1\tghi",
369N/A data_out = Y.DataSchema.Text.apply(schema, data_in);
369N/A
369N/A ASSERT.isArray(data_out.results, "Expected results property.");
369N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
4659N/A ASSERT.areSame("foo", data_out.results[0].type, "Expected first type.");
4659N/A ASSERT.areSame("bat", data_out.results[2].type, "Expected last type.");
4659N/A ASSERT.areSame(0, data_out.results[0].age, "Expected first age.");
4659N/A ASSERT.areSame(-1, data_out.results[2].age, "Expected last age.");
4659N/A ASSERT.areSame("abc", data_out.results[0].name, "Expected first name.");
4659N/A ASSERT.areSame("ghi", data_out.results[2].name, "Expected last name.");
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A },
4659N/A
4659N/A testTextResultsOnly: function() {
4659N/A var schema = {
4659N/A resultDelimiter: ","
4659N/A },
4659N/A data_in = "foo,bar,bat,",
4659N/A data_out = Y.DataSchema.Text.apply(schema, data_in);
4659N/A
4659N/A ASSERT.isArray(data_out.results, "Expected results property.");
4659N/A ASSERT.areSame(3, data_out.results.length, "Expected 3 results.");
4659N/A ASSERT.areSame("foo", data_out.results[0], "Expected first result.");
4659N/A ASSERT.areSame("bat", data_out.results[2], "Expected last result.");
4659N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
4659N/A },
4659N/A
4659N/A testTextError: function() {
4659N/A var schema = {
4659N/A resultDelimiter: "\n",
4659N/A fieldDelimiter: ","
4659N/A },
4659N/A data_in = 123,
4659N/A data_out = Y.DataSchema.Text.apply(schema, data_in);
4659N/A
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A OBJECTASSERT.ownsNoKeys(data_out.meta, "Expected empty meta.");
369N/A ARRAYASSERT.isEmpty(data_out.results, "Expected empty results.");
369N/A ASSERT.isObject(data_out.error, "Expected text parse error.");
369N/A
369N/A schema = {
369N/A foo: "bar"
369N/A };
369N/A data_in = "foo,0,abc\nbar,1,def\nbat,-1,ghi",
369N/A data_out = Y.DataSchema.Text.apply(schema, data_in);
369N/A
369N/A ASSERT.isObject(data_out.meta, "Expected meta property.");
369N/A OBJECTASSERT.ownsNoKeys(data_out.meta, "Expected empty meta.");
369N/A ARRAYASSERT.isEmpty(data_out.results, "Expected empty results.");
369N/A ASSERT.isObject(data_out.error, "Expected text parse error.");
369N/A }
369N/A });
369N/A
369N/A var suite = new Y.Test.Suite({name:"DataSchema Test Suite"});
369N/A suite.add(testJSON);
369N/A suite.add(testXML);
369N/A suite.add(testHTML);
369N/A suite.add(testArray);
369N/A suite.add(testText);
369N/A
369N/A Y.Test.Runner.setName("DataSchema Test Runner");
369N/A Y.Test.Runner.add(suite);
369N/A Y.Test.Runner.run();
369N/A });
369N/A})();
369N/A</script>
369N/A</body>
369N/A</html>
369N/A