http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js new file mode 100644 index 0000000..b41bd00 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js @@ -0,0 +1,15 @@ + +require(__dirname).test({ + expect : [ + ["opentag", {"name": "R","attributes": {}}], + ["opencdata", undefined], + ["cdata", " this is "], + ["closecdata", undefined], + ["closetag", "R"] + ] +}) + .write("<r><![CDATA[ this is ]") + .write("]>") + .write("</r>") + .close(); +
http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js new file mode 100644 index 0000000..07aeac4 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js @@ -0,0 +1,28 @@ + +var p = require(__dirname).test({ + expect : [ + ["opentag", {"name": "R","attributes": {}}], + ["opencdata", undefined], + ["cdata", "[[[[[[[[]]]]]]]]"], + ["closecdata", undefined], + ["closetag", "R"] + ] +}) +var x = "<r><![CDATA[[[[[[[[[]]]]]]]]]]></r>" +for (var i = 0; i < x.length ; i ++) { + p.write(x.charAt(i)) +} +p.close(); + + +var p2 = require(__dirname).test({ + expect : [ + ["opentag", {"name": "R","attributes": {}}], + ["opencdata", undefined], + ["cdata", "[[[[[[[[]]]]]]]]"], + ["closecdata", undefined], + ["closetag", "R"] + ] +}) +var x = "<r><![CDATA[[[[[[[[[]]]]]]]]]]></r>" +p2.write(x).close(); http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js new file mode 100644 index 0000000..dab2015 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js @@ -0,0 +1,15 @@ + +require(__dirname).test({ + expect : [ + ["opentag", {"name": "R","attributes": {}}], + ["opencdata", undefined], + ["cdata", " this is "], + ["closecdata", undefined], + ["opencdata", undefined], + ["cdata", "character data  "], + ["closecdata", undefined], + ["closetag", "R"] + ] +}).write("<r><![CDATA[ this is ]]>").write("<![CDA").write("T").write("A[") + .write("character data  ").write("]]></r>").close(); + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata.js new file mode 100644 index 0000000..0f09cce --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/cdata.js @@ -0,0 +1,10 @@ +require(__dirname).test({ + xml : "<r><![CDATA[ this is character data  ]]></r>", + expect : [ + ["opentag", {"name": "R","attributes": {}}], + ["opencdata", undefined], + ["cdata", " this is character data  "], + ["closecdata", undefined], + ["closetag", "R"] + ] +}); http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/index.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/index.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/index.js new file mode 100644 index 0000000..d4e1ef4 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/index.js @@ -0,0 +1,86 @@ +var globalsBefore = JSON.stringify(Object.keys(global)) + , util = require("util") + , assert = require("assert") + , fs = require("fs") + , path = require("path") + , sax = require("../lib/sax") + +exports.sax = sax + +// handy way to do simple unit tests +// if the options contains an xml string, it'll be written and the parser closed. +// otherwise, it's assumed that the test will write and close. +exports.test = function test (options) { + var xml = options.xml + , parser = sax.parser(options.strict, options.opt) + , expect = options.expect + , e = 0 + sax.EVENTS.forEach(function (ev) { + parser["on" + ev] = function (n) { + if (process.env.DEBUG) { + console.error({ expect: expect[e] + , actual: [ev, n] }) + } + if (e >= expect.length && (ev === "end" || ev === "ready")) return + assert.ok( e < expect.length, + "expectation #"+e+" "+util.inspect(expect[e])+"\n"+ + "Unexpected event: "+ev+" "+(n ? util.inspect(n) : "")) + var inspected = n instanceof Error ? "\n"+ n.message : util.inspect(n) + assert.equal(ev, expect[e][0], + "expectation #"+e+"\n"+ + "Didn't get expected event\n"+ + "expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+ + "actual: "+ev+" "+inspected+"\n") + if (ev === "error") assert.equal(n.message, expect[e][1]) + else assert.deepEqual(n, expect[e][1], + "expectation #"+e+"\n"+ + "Didn't get expected argument\n"+ + "expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+ + "actual: "+ev+" "+inspected+"\n") + e++ + if (ev === "error") parser.resume() + } + }) + if (xml) parser.write(xml).close() + return parser +} + +if (module === require.main) { + var running = true + , failures = 0 + + function fail (file, er) { + util.error("Failed: "+file) + util.error(er.stack || er.message) + failures ++ + } + + fs.readdir(__dirname, function (error, files) { + files = files.filter(function (file) { + return (/\.js$/.exec(file) && file !== 'index.js') + }) + var n = files.length + , i = 0 + console.log("0.." + n) + files.forEach(function (file) { + // run this test. + try { + require(path.resolve(__dirname, file)) + var globalsAfter = JSON.stringify(Object.keys(global)) + if (globalsAfter !== globalsBefore) { + var er = new Error("new globals introduced\n"+ + "expected: "+globalsBefore+"\n"+ + "actual: "+globalsAfter) + globalsBefore = globalsAfter + throw er + } + console.log("ok " + (++i) + " - " + file) + } catch (er) { + console.log("not ok "+ (++i) + " - " + file) + fail(file, er) + } + }) + if (!failures) return console.log("#all pass") + else return console.error(failures + " failure" + (failures > 1 ? "s" : "")) + }) +} http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-23.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-23.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-23.js new file mode 100644 index 0000000..e7991b2 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-23.js @@ -0,0 +1,43 @@ + +require(__dirname).test + ( { xml : + "<compileClassesResponse>"+ + "<result>"+ + "<bodyCrc>653724009</bodyCrc>"+ + "<column>-1</column>"+ + "<id>01pG0000002KoSUIA0</id>"+ + "<line>-1</line>"+ + "<name>CalendarController</name>"+ + "<success>true</success>"+ + "</result>"+ + "</compileClassesResponse>" + + , expect : + [ [ "opentag", { name: "COMPILECLASSESRESPONSE", attributes: {} } ] + , [ "opentag", { name : "RESULT", attributes: {} } ] + , [ "opentag", { name: "BODYCRC", attributes: {} } ] + , [ "text", "653724009" ] + , [ "closetag", "BODYCRC" ] + , [ "opentag", { name: "COLUMN", attributes: {} } ] + , [ "text", "-1" ] + , [ "closetag", "COLUMN" ] + , [ "opentag", { name: "ID", attributes: {} } ] + , [ "text", "01pG0000002KoSUIA0" ] + , [ "closetag", "ID" ] + , [ "opentag", {name: "LINE", attributes: {} } ] + , [ "text", "-1" ] + , [ "closetag", "LINE" ] + , [ "opentag", {name: "NAME", attributes: {} } ] + , [ "text", "CalendarController" ] + , [ "closetag", "NAME" ] + , [ "opentag", {name: "SUCCESS", attributes: {} } ] + , [ "text", "true" ] + , [ "closetag", "SUCCESS" ] + , [ "closetag", "RESULT" ] + , [ "closetag", "COMPILECLASSESRESPONSE" ] + ] + , strict : false + , opt : {} + } + ) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-30.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-30.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-30.js new file mode 100644 index 0000000..c2cc809 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-30.js @@ -0,0 +1,24 @@ +// https://github.com/isaacs/sax-js/issues/33 +require(__dirname).test + ( { xml : "<xml>\n"+ + "<!-- \n"+ + " comment with a single dash- in it\n"+ + "-->\n"+ + "<data/>\n"+ + "</xml>" + + , expect : + [ [ "opentag", { name: "xml", attributes: {} } ] + , [ "text", "\n" ] + , [ "comment", " \n comment with a single dash- in it\n" ] + , [ "text", "\n" ] + , [ "opentag", { name: "data", attributes: {} } ] + , [ "closetag", "data" ] + , [ "text", "\n" ] + , [ "closetag", "xml" ] + ] + , strict : true + , opt : {} + } + ) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-35.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-35.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-35.js new file mode 100644 index 0000000..7c521c5 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-35.js @@ -0,0 +1,15 @@ +// https://github.com/isaacs/sax-js/issues/35 +require(__dirname).test + ( { xml : "<xml>

\n"+ + "</xml>" + + , expect : + [ [ "opentag", { name: "xml", attributes: {} } ] + , [ "text", "\r\r\n" ] + , [ "closetag", "xml" ] + ] + , strict : true + , opt : {} + } + ) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-47.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-47.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-47.js new file mode 100644 index 0000000..911c7d0 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-47.js @@ -0,0 +1,13 @@ +// https://github.com/isaacs/sax-js/issues/47 +require(__dirname).test + ( { xml : '<a href="query.svc?x=1&y=2&z=3"/>' + , expect : [ + [ "attribute", { name:'href', value:"query.svc?x=1&y=2&z=3"} ], + [ "opentag", { name: "a", attributes: { href:"query.svc?x=1&y=2&z=3"} } ], + [ "closetag", "a" ] + ] + , strict : true + , opt : {} + } + ) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-49.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-49.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-49.js new file mode 100644 index 0000000..2964325 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/issue-49.js @@ -0,0 +1,31 @@ +// https://github.com/isaacs/sax-js/issues/49 +require(__dirname).test + ( { xml : "<xml><script>hello world</script></xml>" + , expect : + [ [ "opentag", { name: "xml", attributes: {} } ] + , [ "opentag", { name: "script", attributes: {} } ] + , [ "text", "hello world" ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + +require(__dirname).test + ( { xml : "<xml><script><![CDATA[hello world]]></script></xml>" + , expect : + [ [ "opentag", { name: "xml", attributes: {} } ] + , [ "opentag", { name: "script", attributes: {} } ] + , [ "opencdata", undefined ] + , [ "cdata", "hello world" ] + , [ "closecdata", undefined ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/parser-position.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/parser-position.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/parser-position.js new file mode 100644 index 0000000..e4a68b1 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/parser-position.js @@ -0,0 +1,28 @@ +var sax = require("../lib/sax"), + assert = require("assert") + +function testPosition(chunks, expectedEvents) { + var parser = sax.parser(); + expectedEvents.forEach(function(expectation) { + parser['on' + expectation[0]] = function() { + for (var prop in expectation[1]) { + assert.equal(parser[prop], expectation[1][prop]); + } + } + }); + chunks.forEach(function(chunk) { + parser.write(chunk); + }); +}; + +testPosition(['<div>abcdefgh</div>'], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); + +testPosition(['<div>abcde','fgh</div>'], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/script.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/script.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/script.js new file mode 100644 index 0000000..464c051 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/script.js @@ -0,0 +1,12 @@ +require(__dirname).test({ + xml : "<html><head><script>if (1 < 0) { console.log('elo there'); }</script></head></html>", + expect : [ + ["opentag", {"name": "HTML","attributes": {}}], + ["opentag", {"name": "HEAD","attributes": {}}], + ["opentag", {"name": "SCRIPT","attributes": {}}], + ["script", "if (1 < 0) { console.log('elo there'); }"], + ["closetag", "SCRIPT"], + ["closetag", "HEAD"], + ["closetag", "HTML"] + ] +}); http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js new file mode 100644 index 0000000..ce9c045 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js @@ -0,0 +1,40 @@ + +require(__dirname).test({ + xml : + "<root>"+ + "<child>" + + "<haha />" + + "</child>" + + "<monkey>" + + "=(|)" + + "</monkey>" + + "</root>", + expect : [ + ["opentag", { + "name": "root", + "attributes": {} + }], + ["opentag", { + "name": "child", + "attributes": {} + }], + ["opentag", { + "name": "haha", + "attributes": {} + }], + ["closetag", "haha"], + ["closetag", "child"], + ["opentag", { + "name": "monkey", + "attributes": {} + }], + ["text", "=(|)"], + ["closetag", "monkey"], + ["closetag", "root"], + ["end"], + ["ready"] + ], + strict : true, + opt : {} +}); + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child.js new file mode 100644 index 0000000..bc6b52b --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-child.js @@ -0,0 +1,40 @@ + +require(__dirname).test({ + xml : + "<root>"+ + "<child>" + + "<haha />" + + "</child>" + + "<monkey>" + + "=(|)" + + "</monkey>" + + "</root>", + expect : [ + ["opentag", { + "name": "ROOT", + "attributes": {} + }], + ["opentag", { + "name": "CHILD", + "attributes": {} + }], + ["opentag", { + "name": "HAHA", + "attributes": {} + }], + ["closetag", "HAHA"], + ["closetag", "CHILD"], + ["opentag", { + "name": "MONKEY", + "attributes": {} + }], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js new file mode 100644 index 0000000..b2c5736 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js @@ -0,0 +1,25 @@ + +require(__dirname).test({ + xml : + "<root> "+ + "<haha /> "+ + "<haha/> "+ + "<monkey> "+ + "=(|) "+ + "</monkey>"+ + "</root> ", + expect : [ + ["opentag", {name:"ROOT", attributes:{}}], + ["opentag", {name:"HAHA", attributes:{}}], + ["closetag", "HAHA"], + ["opentag", {name:"HAHA", attributes:{}}], + ["closetag", "HAHA"], + // ["opentag", {name:"HAHA", attributes:{}}], + // ["closetag", "HAHA"], + ["opentag", {name:"MONKEY", attributes:{}}], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"] + ], + opt : { trim : true } +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/stray-ending.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/stray-ending.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/stray-ending.js new file mode 100644 index 0000000..6b0aa7f --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/stray-ending.js @@ -0,0 +1,17 @@ +// stray ending tags should just be ignored in non-strict mode. +// https://github.com/isaacs/sax-js/issues/32 +require(__dirname).test + ( { xml : + "<a><b></c></b></a>" + , expect : + [ [ "opentag", { name: "A", attributes: {} } ] + , [ "opentag", { name: "B", attributes: {} } ] + , [ "text", "</c>" ] + , [ "closetag", "B" ] + , [ "closetag", "A" ] + ] + , strict : false + , opt : {} + } + ) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js new file mode 100644 index 0000000..3e1fb2e --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js @@ -0,0 +1,17 @@ + +require(__dirname).test({ + xml : "<span>Welcome,</span> to monkey land", + expect : [ + ["opentag", { + "name": "SPAN", + "attributes": {} + }], + ["text", "Welcome,"], + ["closetag", "SPAN"], + ["text", " to monkey land"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/unquoted.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/unquoted.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/unquoted.js new file mode 100644 index 0000000..79f1d0b --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/unquoted.js @@ -0,0 +1,17 @@ +// unquoted attributes should be ok in non-strict mode +// https://github.com/isaacs/sax-js/issues/31 +require(__dirname).test + ( { xml : + "<span class=test hello=world></span>" + , expect : + [ [ "attribute", { name: "class", value: "test" } ] + , [ "attribute", { name: "hello", value: "world" } ] + , [ "opentag", { name: "SPAN", + attributes: { class: "test", hello: "world" } } ] + , [ "closetag", "SPAN" ] + ] + , strict : false + , opt : {} + } + ) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js new file mode 100644 index 0000000..596d82b --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js @@ -0,0 +1,67 @@ +var t = require(__dirname) + + , xmls = // should be the same both ways. + [ "<parent xmlns:a='http://ATTRIBUTE' a:attr='value' />" + , "<parent a:attr='value' xmlns:a='http://ATTRIBUTE' />" ] + + , ex1 = + [ [ "opennamespace" + , { prefix: "a" + , uri: "http://ATTRIBUTE" + } + ] + , [ "attribute" + , { name: "xmlns:a" + , value: "http://ATTRIBUTE" + , prefix: "xmlns" + , local: "a" + , uri: "http://www.w3.org/2000/xmlns/" + } + ] + , [ "attribute" + , { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + ] + , [ "opentag" + , { name: "parent" + , uri: "" + , prefix: "" + , local: "parent" + , attributes: + { "a:attr": + { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + , "xmlns:a": + { name: "xmlns:a" + , local: "a" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "http://ATTRIBUTE" + } + } + , ns: {"a": "http://ATTRIBUTE"} + } + ] + , ["closetag", "parent"] + , ["closenamespace", { prefix: "a", uri: "http://ATTRIBUTE" }] + ] + + // swap the order of elements 2 and 1 + , ex2 = [ex1[0], ex1[2], ex1[1]].concat(ex1.slice(3)) + , expected = [ex1, ex2] + +xmls.forEach(function (x, i) { + t.test({ xml: x + , expect: expected[i] + , strict: true + , opt: { xmlns: true } + }) +}) http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js new file mode 100644 index 0000000..f464876 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js @@ -0,0 +1,59 @@ + +require(__dirname).test + ( { xml : + "<root xmlns:x='x1' xmlns:y='y1' x:a='x1' y:a='y1'>"+ + "<rebind xmlns:x='x2'>"+ + "<check x:a='x2' y:a='y1'/>"+ + "</rebind>"+ + "<check x:a='x1' y:a='y1'/>"+ + "</root>" + + , expect : + [ [ "opennamespace", { prefix: "x", uri: "x1" } ] + , [ "opennamespace", { prefix: "y", uri: "y1" } ] + , [ "attribute", { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "attribute", { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } ] + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } + , "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } + , "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' } } ] + + , [ "opennamespace", { prefix: "x", uri: "x2" } ] + , [ "attribute", { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } }, + ns: { x: 'x2' } } ] + + , [ "attribute", { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x2' } } ] + + , [ "closetag", "check" ] + + , [ "closetag", "rebind" ] + , [ "closenamespace", { prefix: "x", uri: "x2" } ] + + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' } } ] + , [ "closetag", "check" ] + + , [ "closetag", "root" ] + , [ "closenamespace", { prefix: "x", uri: "x1" } ] + , [ "closenamespace", { prefix: "y", uri: "y1" } ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js new file mode 100644 index 0000000..4ad615b --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js @@ -0,0 +1,71 @@ + +require(__dirname).test + ( { xml : + "<root>"+ + "<plain attr='normal'/>"+ + "<ns1 xmlns='uri:default'>"+ + "<plain attr='normal'/>"+ + "</ns1>"+ + "<ns2 xmlns:a='uri:nsa'>"+ + "<plain attr='normal'/>"+ + "<a:ns a:attr='namespaced'/>"+ + "</ns2>"+ + "</root>" + + , expect : + [ [ "opentag", { name: "root", prefix: "", local: "root", uri: "", + attributes: {}, ns: {} } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", uri: "", prefix: "", local: "attr", uri: "" } }, + ns: {} } ] + , [ "closetag", "plain" ] + + , [ "opennamespace", { prefix: "", uri: "uri:default" } ] + + , [ "attribute", { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } ] + , [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default", + attributes: { "xmlns": { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { "": "uri:default" } } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "uri:default" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: { '': 'uri:default' }, + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "uri:default" } } } ] + , [ "closetag", "plain" ] + + , [ "closetag", "ns1" ] + + , [ "closenamespace", { prefix: "", uri: "uri:default" } ] + + , [ "opennamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } ] + + , [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "", + attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { a: "uri:nsa" } } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + ns: { a: 'uri:nsa' } } ] + , [ "closetag", "plain" ] + + , [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } ] + , [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa", + attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } }, + ns: { a: 'uri:nsa' } } ] + , [ "closetag", "a:ns" ] + + , [ "closetag", "ns2" ] + + , [ "closenamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "closetag", "root" ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js new file mode 100644 index 0000000..2944b87 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js @@ -0,0 +1,15 @@ + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ ["error", "Unbound namespace prefix: \"unbound\"\nLine: 0\nColumn: 28\nChar: >"] + + , [ "attribute", { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } }, + ns: {} } ] + , [ "closetag", "root" ] + ] + } +).write("<root unbound:attr='value'/>") http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js new file mode 100644 index 0000000..16da771 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js @@ -0,0 +1,35 @@ +require(__dirname).test( + { xml : "<root xml:lang='en'/>" + , expect : + [ [ "attribute" + , { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + ] + , [ "opentag" + , { name: "root" + , uri: "" + , prefix: "" + , local: "root" + , attributes: + { "xml:lang": + { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + } + , ns: {} + } + ] + , ["closetag", "root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js new file mode 100644 index 0000000..9a1ce1b --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js @@ -0,0 +1,20 @@ +require(__dirname).test( + { xml : "<xml:root/>" + , expect : + [ + [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: {} + , ns: {} + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js new file mode 100644 index 0000000..1eba9c7 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js @@ -0,0 +1,40 @@ +require(__dirname).test( + { xml : "<xml:root xmlns:xml='ERROR'/>" + , expect : + [ ["error" + , "xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n" + + "Actual: ERROR\n" + + "Line: 0\nColumn: 27\nChar: '" + ] + , [ "attribute" + , { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + ] + , [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: + { "xmlns:xml": + { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + } + , ns: {} + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/package.json ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/package.json b/bin/node_modules/cordova-common/node_modules/elementtree/package.json new file mode 100644 index 0000000..cbeffca --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/package.json @@ -0,0 +1,75 @@ +{ + "author": { + "name": "Rackspace US, Inc." + }, + "contributors": [ + { + "name": "Paul Querna", + "email": "[email protected]" + }, + { + "name": "Tomaz Muraus", + "email": "[email protected]" + } + ], + "name": "elementtree", + "description": "XML Serialization and Parsing module based on Python's ElementTree.", + "version": "0.1.6", + "keywords": [ + "xml", + "sax", + "parser", + "seralization", + "elementtree" + ], + "homepage": "https://github.com/racker/node-elementtree", + "repository": { + "type": "git", + "url": "git://github.com/racker/node-elementtree.git" + }, + "main": "lib/elementtree.js", + "directories": { + "lib": "lib" + }, + "scripts": { + "test": "make test" + }, + "engines": { + "node": ">= 0.4.0" + }, + "dependencies": { + "sax": "0.3.5" + }, + "devDependencies": { + "whiskey": "0.8.x" + }, + "licenses": [ + { + "type": "Apache", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + } + ], + "bugs": { + "url": "https://github.com/racker/node-elementtree/issues" + }, + "_id": "[email protected]", + "dist": { + "shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c", + "tarball": "http://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz" + }, + "_from": "elementtree@^0.1.6", + "_npmVersion": "1.3.24", + "_npmUser": { + "name": "rphillips", + "email": "[email protected]" + }, + "maintainers": [ + { + "name": "rphillips", + "email": "[email protected]" + } + ], + "_shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c", + "_resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz", + "readme": "ERROR: No README data found!" +} http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml b/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml new file mode 100644 index 0000000..72c33ae --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> +<container name="test_container_1" xmlns:android="http://schemas.android.com/apk/res/android"> + <object>dd + <name>test_object_1</name> + <hash>4281c348eaf83e70ddce0e07221c3d28</hash> + <bytes android:type="cool">14</bytes> + <content_type>application/octetstream</content_type> + <last_modified>2009-02-03T05:26:32.612278</last_modified> + </object> + <object> + <name>test_object_2</name> + <hash>b039efe731ad111bc1b0ef221c3849d0</hash> + <bytes android:type="lame">64</bytes> + <content_type>application/octetstream</content_type> + <last_modified>2009-02-03T05:26:32.612278</last_modified> + </object> +</container> http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml b/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml new file mode 100644 index 0000000..5f94bbd --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml @@ -0,0 +1,14 @@ +<?xml version="1.0"?> +<object> + <title> + Hello World + </title> + <children> + <object id="obj1" /> + <object id="obj2" /> + <object id="obj3" /> + </children> + <text><![CDATA[ + Test & Test & Test + ]]></text> +</object> http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/elementtree/tests/test-simple.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/elementtree/tests/test-simple.js b/bin/node_modules/cordova-common/node_modules/elementtree/tests/test-simple.js new file mode 100644 index 0000000..1fc04b8 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/elementtree/tests/test-simple.js @@ -0,0 +1,339 @@ +/** + * Copyright 2011 Rackspace + * + * 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 fs = require('fs'); +var path = require('path'); + +var sprintf = require('./../lib/sprintf').sprintf; +var et = require('elementtree'); +var XML = et.XML; +var ElementTree = et.ElementTree; +var Element = et.Element; +var SubElement = et.SubElement; +var SyntaxError = require('./../lib/errors').SyntaxError; + +function readFile(name) { + return fs.readFileSync(path.join(__dirname, '/data/', name), 'utf8'); +} + +exports['test_simplest'] = function(test, assert) { + /* Ported from <https://github.com/lxml/lxml/blob/master/src/lxml/tests/test_elementtree.py> */ + var Element = et.Element; + var root = Element('root'); + root.append(Element('one')); + root.append(Element('two')); + root.append(Element('three')); + assert.equal(3, root.len()); + assert.equal('one', root.getItem(0).tag); + assert.equal('two', root.getItem(1).tag); + assert.equal('three', root.getItem(2).tag); + test.finish(); +}; + + +exports['test_attribute_values'] = function(test, assert) { + var XML = et.XML; + var root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>'); + assert.equal('Alpha', root.attrib['alpha']); + assert.equal('Beta', root.attrib['beta']); + assert.equal('Gamma', root.attrib['gamma']); + test.finish(); +}; + + +exports['test_findall'] = function(test, assert) { + var XML = et.XML; + var root = XML('<a><b><c/></b><b/><c><b/></c></a>'); + + assert.equal(root.findall("c").length, 1); + assert.equal(root.findall(".//c").length, 2); + assert.equal(root.findall(".//b").length, 3); + assert.equal(root.findall(".//b")[0]._children.length, 1); + assert.equal(root.findall(".//b")[1]._children.length, 0); + assert.equal(root.findall(".//b")[2]._children.length, 0); + assert.deepEqual(root.findall('.//b')[0], root.getchildren()[0]); + + test.finish(); +}; + +exports['test_find'] = function(test, assert) { + var a = Element('a'); + var b = SubElement(a, 'b'); + var c = SubElement(a, 'c'); + + assert.deepEqual(a.find('./b/..'), a); + test.finish(); +}; + +exports['test_elementtree_find_qname'] = function(test, assert) { + var tree = new et.ElementTree(XML('<a><b><c/></b><b/><c><b/></c></a>')); + assert.deepEqual(tree.find(new et.QName('c')), tree.getroot()._children[2]); + test.finish(); +}; + +exports['test_attrib_ns_clear'] = function(test, assert) { + var attribNS = '{http://foo/bar}x'; + + var par = Element('par'); + par.set(attribNS, 'a'); + var child = SubElement(par, 'child'); + child.set(attribNS, 'b'); + + assert.equal('a', par.get(attribNS)); + assert.equal('b', child.get(attribNS)); + + par.clear(); + assert.equal(null, par.get(attribNS)); + assert.equal('b', child.get(attribNS)); + test.finish(); +}; + +exports['test_create_tree_and_parse_simple'] = function(test, assert) { + var i = 0; + var e = new Element('bar', {}); + var expected = "<?xml version='1.0' encoding='utf-8'?>\n" + + '<bar><blah a="11" /><blah a="12" /><gag a="13" b="abc">ponies</gag></bar>'; + + SubElement(e, "blah", {a: 11}); + SubElement(e, "blah", {a: 12}); + var se = et.SubElement(e, "gag", {a: '13', b: 'abc'}); + se.text = 'ponies'; + + se.itertext(function(text) { + assert.equal(text, 'ponies'); + i++; + }); + + assert.equal(i, 1); + var etree = new ElementTree(e); + var xml = etree.write(); + assert.equal(xml, expected); + test.finish(); +}; + +exports['test_write_with_options'] = function(test, assert) { + var i = 0; + var e = new Element('bar', {}); + var expected1 = "<?xml version='1.0' encoding='utf-8'?>\n" + + '<bar>\n' + + ' <blah a="11">\n' + + ' <baz d="11">test</baz>\n' + + ' </blah>\n' + + ' <blah a="12" />\n' + + ' <gag a="13" b="abc">ponies</gag>\n' + + '</bar>\n'; + var expected2 = "<?xml version='1.0' encoding='utf-8'?>\n" + + '<bar>\n' + + ' <blah a="11">\n' + + ' <baz d="11">test</baz>\n' + + ' </blah>\n' + + ' <blah a="12" />\n' + + ' <gag a="13" b="abc">ponies</gag>\n' + + '</bar>\n'; + + var expected3 = "<?xml version='1.0' encoding='utf-8'?>\n" + + '<object>\n' + + ' <title>\n' + + ' Hello World\n' + + ' </title>\n' + + ' <children>\n' + + ' <object id="obj1" />\n' + + ' <object id="obj2" />\n' + + ' <object id="obj3" />\n' + + ' </children>\n' + + ' <text>\n' + + ' Test & Test & Test\n' + + ' </text>\n' + + '</object>\n'; + + var se1 = SubElement(e, "blah", {a: 11}); + var se2 = SubElement(se1, "baz", {d: 11}); + se2.text = 'test'; + SubElement(e, "blah", {a: 12}); + var se = et.SubElement(e, "gag", {a: '13', b: 'abc'}); + se.text = 'ponies'; + + se.itertext(function(text) { + assert.equal(text, 'ponies'); + i++; + }); + + assert.equal(i, 1); + var etree = new ElementTree(e); + var xml1 = etree.write({'indent': 4}); + var xml2 = etree.write({'indent': 2}); + assert.equal(xml1, expected1); + assert.equal(xml2, expected2); + + var file = readFile('xml2.xml'); + var etree2 = et.parse(file); + var xml3 = etree2.write({'indent': 4}); + assert.equal(xml3, expected3); + test.finish(); +}; + +exports['test_parse_and_find_2'] = function(test, assert) { + var data = readFile('xml1.xml'); + var etree = et.parse(data); + + assert.equal(etree.findall('./object').length, 2); + assert.equal(etree.findall('[@name]').length, 1); + assert.equal(etree.findall('[@name="test_container_1"]').length, 1); + assert.equal(etree.findall('[@name=\'test_container_1\']').length, 1); + assert.equal(etree.findall('./object')[0].findtext('name'), 'test_object_1'); + assert.equal(etree.findtext('./object/name'), 'test_object_1'); + assert.equal(etree.findall('.//bytes').length, 2); + assert.equal(etree.findall('*/bytes').length, 2); + assert.equal(etree.findall('*/foobar').length, 0); + + test.finish(); +}; + +exports['test_namespaced_attribute'] = function(test, assert) { + var data = readFile('xml1.xml'); + var etree = et.parse(data); + + assert.equal(etree.findall('*/bytes[@android:type="cool"]').length, 1); + + test.finish(); +} + +exports['test_syntax_errors'] = function(test, assert) { + var expressions = [ './/@bar', '[@bar', '[@foo=bar]', '[@', '/bar' ]; + var errCount = 0; + var data = readFile('xml1.xml'); + var etree = et.parse(data); + + expressions.forEach(function(expression) { + try { + etree.findall(expression); + } + catch (err) { + errCount++; + } + }); + + assert.equal(errCount, expressions.length); + test.finish(); +}; + +exports['test_register_namespace'] = function(test, assert){ + var prefix = 'TESTPREFIX'; + var namespace = 'http://seriously.unknown/namespace/URI'; + var errCount = 0; + + var etree = Element(sprintf('{%s}test', namespace)); + assert.equal(et.tostring(etree, { 'xml_declaration': false}), + sprintf('<ns0:test xmlns:ns0="%s" />', namespace)); + + et.register_namespace(prefix, namespace); + var etree = Element(sprintf('{%s}test', namespace)); + assert.equal(et.tostring(etree, { 'xml_declaration': false}), + sprintf('<%s:test xmlns:%s="%s" />', prefix, prefix, namespace)); + + try { + et.register_namespace('ns25', namespace); + } + catch (err) { + errCount++; + } + + assert.equal(errCount, 1, 'Reserved prefix used, but exception was not thrown'); + test.finish(); +}; + +exports['test_tostring'] = function(test, assert) { + var a = Element('a'); + var b = SubElement(a, 'b'); + var c = SubElement(a, 'c'); + c.text = 543; + + assert.equal(et.tostring(a, { 'xml_declaration': false }), '<a><b /><c>543</c></a>'); + assert.equal(et.tostring(c, { 'xml_declaration': false }), '<c>543</c>'); + test.finish(); +}; + +exports['test_escape'] = function(test, assert) { + var a = Element('a'); + var b = SubElement(a, 'b'); + b.text = '&&&&<>"\n\r'; + + assert.equal(et.tostring(a, { 'xml_declaration': false }), '<a><b>&&&&<>\"\n\r</b></a>'); + test.finish(); +}; + +exports['test_find_null'] = function(test, assert) { + var root = Element('root'); + var node = SubElement(root, 'node'); + var leaf = SubElement(node, 'leaf'); + leaf.text = 'ipsum'; + + assert.equal(root.find('node/leaf'), leaf); + assert.equal(root.find('no-such-node/leaf'), null); + test.finish(); +}; + +exports['test_findtext_null'] = function(test, assert) { + var root = Element('root'); + var node = SubElement(root, 'node'); + var leaf = SubElement(node, 'leaf'); + leaf.text = 'ipsum'; + + assert.equal(root.findtext('node/leaf'), 'ipsum'); + assert.equal(root.findtext('no-such-node/leaf'), null); + test.finish(); +}; + +exports['test_remove'] = function(test, assert) { + var root = Element('root'); + var node1 = SubElement(root, 'node1'); + var node2 = SubElement(root, 'node2'); + var node3 = SubElement(root, 'node3'); + + assert.equal(root.len(), 3); + + root.remove(node2); + + assert.equal(root.len(), 2); + assert.equal(root.getItem(0).tag, 'node1') + assert.equal(root.getItem(1).tag, 'node3') + + test.finish(); +}; + +exports['test_cdata_write'] = function(test, assert) { + var root, etree, xml, values, value, i; + + values = [ + 'if(0>1) then true;', + '<test1>ponies hello</test1>', + '' + ]; + + for (i = 0; i < values.length; i++) { + value = values[i]; + + root = Element('root'); + root.append(et.CData(value)); + etree = new ElementTree(root); + xml = etree.write({'xml_declaration': false}); + + assert.equal(xml, sprintf('<root><![CDATA[%s]]></root>', value)); + } + + test.finish(); +}; http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/glob/LICENSE ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/glob/LICENSE b/bin/node_modules/cordova-common/node_modules/glob/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/glob/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/glob/README.md ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/glob/README.md b/bin/node_modules/cordova-common/node_modules/glob/README.md new file mode 100644 index 0000000..063cf95 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/glob/README.md @@ -0,0 +1,377 @@ +[](https://travis-ci.org/isaacs/node-glob/) [](https://david-dm.org/isaacs/node-glob) [](https://david-dm.org/isaacs/node-glob#info=devDependencies) [](https://david-dm.org/isaacs/node-glob#info=optionalDependencies) + +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + + + +## Usage + +```javascript +var glob = require("glob") + +// options is optional +glob("**/*.js", options, function (er, files) { + // files is an array of filenames. + // If the `nonull` option is set, and nothing + // was found, then files is ["**/*.js"] + // er is an error object or null. +}) +``` + +## Glob Primer + +"Globs" are the patterns you type when you do stuff like `ls *.js` on +the command line, or put `build/*` in a `.gitignore` file. + +Before parsing the path part patterns, braced sections are expanded +into a set. Braced sections start with `{` and end with `}`, with any +number of comma-delimited sections within. Braced sections may contain +slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in a +path portion: + +* `*` Matches 0 or more characters in a single path portion +* `?` Matches 1 character +* `[...]` Matches a range of characters, similar to a RegExp range. + If the first character of the range is `!` or `^` then it matches + any character not in the range. +* `!(pattern|pattern|pattern)` Matches anything that does not match + any of the patterns provided. +* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the + patterns provided. +* `+(pattern|pattern|pattern)` Matches one or more occurrences of the + patterns provided. +* `*(a|b|c)` Matches zero or more occurrences of the patterns provided +* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided +* `**` If a "globstar" is alone in a path portion, then it matches + zero or more directories and subdirectories searching for matches. + It does not crawl symlinked directories. + +### Dots + +If a file or directory path portion has a `.` as the first character, +then it will not match any glob pattern unless that pattern's +corresponding path part also has a `.` as its first character. + +For example, the pattern `a/.*/c` would match the file at `a/.b/c`. +However the pattern `a/*/c` would not, because `*` does not start with +a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has no +slashes in it, then it will seek for any file anywhere in the tree +with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Negation + +The intent for negation would be for a pattern starting with `!` to +match everything that *doesn't* match the supplied pattern. However, +the implementation is weird, and for the time being, this should be +avoided. The behavior is deprecated in version 5, and will be removed +entirely in version 6. + +### Empty Sets + +If no matching files are found, then an empty array is returned. This +differs from the shell, where the pattern itself is returned. For +example: + + $ echo a*s*d*f + a*s*d*f + +To get the bash-style behavior, set the `nonull:true` in the options. + +### See Also: + +* `man sh` +* `man bash` (Search for "Pattern Matching") +* `man 3 fnmatch` +* `man 5 gitignore` +* [minimatch documentation](https://github.com/isaacs/minimatch) + +## glob.hasMagic(pattern, [options]) + +Returns `true` if there are any special characters in the pattern, and +`false` otherwise. + +Note that the options affect the results. If `noext:true` is set in +the options object, then `+(a|b)` will not be considered a magic +pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` +then that is considered magical, unless `nobrace:true` is set in the +options. + +## glob(pattern, [options], cb) + +* `pattern` {String} Pattern to be matched +* `options` {Object} +* `cb` {Function} + * `err` {Error | null} + * `matches` {Array<String>} filenames found matching the pattern + +Perform an asynchronous glob search. + +## glob.sync(pattern, [options]) + +* `pattern` {String} Pattern to be matched +* `options` {Object} +* return: {Array<String>} filenames found matching the pattern + +Perform a synchronous glob search. + +## Class: glob.Glob + +Create a Glob object by instantiating the `glob.Glob` class. + +```javascript +var Glob = require("glob").Glob +var mg = new Glob(pattern, options, cb) +``` + +It's an EventEmitter, and starts walking the filesystem to find matches +immediately. + +### new glob.Glob(pattern, [options], [cb]) + +* `pattern` {String} pattern to search for +* `options` {Object} +* `cb` {Function} Called when an error occurs, or matches are found + * `err` {Error | null} + * `matches` {Array<String>} filenames found matching the pattern + +Note that if the `sync` flag is set in the options, then matches will +be immediately available on the `g.found` member. + +### Properties + +* `minimatch` The minimatch object that the glob uses. +* `options` The options object passed in. +* `aborted` Boolean which is set to true when calling `abort()`. There + is no way at this time to continue a glob search after aborting, but + you can re-use the statCache to avoid having to duplicate syscalls. +* `cache` Convenience object. Each field has the following possible + values: + * `false` - Path does not exist + * `true` - Path exists + * `'DIR'` - Path exists, and is not a directory + * `'FILE'` - Path exists, and is a directory + * `[file, entries, ...]` - Path exists, is a directory, and the + array value is the results of `fs.readdir` +* `statCache` Cache of `fs.stat` results, to prevent statting the same + path multiple times. +* `symlinks` A record of which paths are symbolic links, which is + relevant in resolving `**` patterns. +* `realpathCache` An optional object which is passed to `fs.realpath` + to minimize unnecessary syscalls. It is stored on the instantiated + Glob object, and may be re-used. + +### Events + +* `end` When the matching is finished, this is emitted with all the + matches found. If the `nonull` option is set, and no match was found, + then the `matches` list contains the original pattern. The matches + are sorted, unless the `nosort` flag is set. +* `match` Every time a match is found, this is emitted with the matched. +* `error` Emitted when an unexpected error is encountered, or whenever + any fs error occurs if `options.strict` is set. +* `abort` When `abort()` is called, this event is raised. + +### Methods + +* `pause` Temporarily stop the search +* `resume` Resume the search +* `abort` Stop the search forever + +### Options + +All the options that can be passed to Minimatch can also be passed to +Glob to change pattern matching behavior. Also, some have been added, +or have glob-specific ramifications. + +All options are false by default, unless otherwise noted. + +All options are added to the Glob object, as well. + +If you are running many `glob` operations, you can pass a Glob object +as the `options` argument to a subsequent operation to shortcut some +`stat` and `readdir` calls. At the very least, you may pass in shared +`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that +parallel glob operations will be sped up by sharing information about +the filesystem. + +* `cwd` The current working directory in which to search. Defaults + to `process.cwd()`. +* `root` The place where patterns starting with `/` will be mounted + onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix + systems, and `C:\` or some such on Windows.) +* `dot` Include `.dot` files in normal matches and `globstar` matches. + Note that an explicit dot in a portion of the pattern will always + match dot files. +* `nomount` By default, a pattern starting with a forward-slash will be + "mounted" onto the root setting, so that a valid filesystem path is + returned. Set this flag to disable that behavior. +* `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. +* `nosort` Don't sort the results. +* `stat` Set to true to stat *all* results. This reduces performance + somewhat, and is completely unnecessary, unless `readdir` is presumed + to be an untrustworthy indicator of file existence. +* `silent` When an unusual error is encountered when attempting to + read a directory, a warning will be printed to stderr. Set the + `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered when attempting to + read a directory, the process will just continue on in search of + other matches. Set the `strict` option to raise an error in these + cases. +* `cache` See `cache` property above. Pass in a previously generated + cache object to save some fs calls. +* `statCache` A cache of results of filesystem information, to prevent + unnecessary stat calls. While it should not normally be necessary + to set this, you may pass the statCache from one glob() call to the + options object of another, if you know that the filesystem will not + change between calls. (See "Race Conditions" below.) +* `symlinks` A cache of known symbolic links. You may pass in a + previously generated `symlinks` object to save `lstat` calls when + resolving `**` matches. +* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. +* `nounique` In some cases, brace-expanded patterns can result in the + same file showing up multiple times in the result set. By default, + this implementation prevents duplicates in the result set. Set this + flag to disable that behavior. +* `nonull` Set to never return an empty set, instead returning a set + containing the pattern itself. This is the default in glob(3). +* `debug` Set to enable debug logging in minimatch and glob. +* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. +* `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) +* `noext` Do not match `+(a|b)` "extglob" patterns. +* `nocase` Perform a case-insensitive match. Note: on + case-insensitive filesystems, non-magic patterns will match by + default, since `stat` and `readdir` will not raise errors. +* `matchBase` Perform a basename-only match if the pattern does not + contain any slash characters. That is, `*.js` would be treated as + equivalent to `**/*.js`, matching all js files in all directories. +* `nodir` Do not match directories, only files. (Note: to match + *only* directories, simply put a `/` at the end of the pattern.) +* `ignore` Add a pattern or an array of patterns to exclude matches. +* `follow` Follow symlinked directories when expanding `**` patterns. + Note that this can result in a lot of duplicate references in the + presence of cyclic links. +* `realpath` Set to true to call `fs.realpath` on all of the results. + In the case of a symlink that cannot be resolved, the full absolute + path to the matched entry is returned (though it will usually be a + broken symlink) +* `nonegate` Suppress deprecated `negate` behavior. (See below.) + Default=true +* `nocomment` Suppress deprecated `comment` behavior. (See below.) + Default=true + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between node-glob and other +implementations, and are intentional. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.3, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +Note that symlinked directories are not crawled as part of a `**`, +though their contents may match against subsequent portions of the +pattern. This prevents infinite loops and duplicates and the like. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then glob returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +### Comments and Negation + +**Note**: In version 5 of this module, negation and comments are +**disabled** by default. You can explicitly set `nonegate:false` or +`nocomment:false` to re-enable them. They are going away entirely in +version 6. + +The intent for negation would be for a pattern starting with `!` to +match everything that *doesn't* match the supplied pattern. However, +the implementation is weird. It is better to use the `ignore` option +to set a pattern or set of patterns to exclude from matches. If you +want the "everything except *x*" type of behavior, you can use `**` as +the main pattern, and set an `ignore` for the things to exclude. + +The comments feature is added in minimatch, primarily to more easily +support use cases like ignore files, where a `#` at the start of a +line makes the pattern "empty". However, in the context of a +straightforward filesystem globber, "comments" don't make much sense. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will always +be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto the +root setting using `path.join`. On windows, this will by default result +in `/foo/*` matching `C:\foo\bar.txt`. + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race conditions, +since it relies on directory walking and such. + +As a result, it is possible that a file that exists when glob looks for +it may have been deleted or modified by the time it returns the result. + +As part of its internal implementation, this program caches all stat +and readdir calls that it makes, in order to cut down on system +overhead. However, this also makes it even more susceptible to races, +especially if the cache or statCache objects are reused between glob +calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast majority +of operations, this is never a problem. + +## Contributing + +Any change to behavior (including bugfixes) must come with a test. + +Patches that fail tests or reduce performance will be rejected. + +``` +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# to benchmark against bash/zsh +npm run bench + +# to profile javascript +npm run prof +``` http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/26cca47e/bin/node_modules/cordova-common/node_modules/glob/common.js ---------------------------------------------------------------------- diff --git a/bin/node_modules/cordova-common/node_modules/glob/common.js b/bin/node_modules/cordova-common/node_modules/glob/common.js new file mode 100644 index 0000000..e36a631 --- /dev/null +++ b/bin/node_modules/cordova-common/node_modules/glob/common.js @@ -0,0 +1,245 @@ +exports.alphasort = alphasort +exports.alphasorti = alphasorti +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} + +function alphasort (a, b) { + return a.localeCompare(b) +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern) + } + + return { + matcher: new Minimatch(pattern), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = options.cwd + self.changedCwd = path.resolve(options.cwd) !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + self.nomount = !!options.nomount + + // disable comments and negation unless the user explicitly + // passes in false as the option. + options.nonegate = options.nonegate === false ? false : true + options.nocomment = options.nocomment === false ? false : true + deprecationWarning(options) + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +// TODO(isaacs): remove entirely in v6 +// exported to reset in tests +exports.deprecationWarned +function deprecationWarning(options) { + if (!options.nonegate || !options.nocomment) { + if (process.noDeprecation !== true && !exports.deprecationWarned) { + var msg = 'glob WARNING: comments and negation will be disabled in v6' + if (process.throwDeprecation) + throw new Error(msg) + else if (process.traceDeprecation) + console.trace(msg) + else + console.error(msg) + + exports.deprecationWarned = true + } + } +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + return !(/\/$/.test(e)) + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
