You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by db...@apache.org on 2015/12/18 12:16:03 UTC

[06/13] cordova-ubuntu git commit: adding missing node_modules

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js b/node_modules/elementtree/node_modules/sax/test/cdata-end-split.js
new file mode 100644
index 0000000..b41bd00
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js b/node_modules/elementtree/node_modules/sax/test/cdata-fake-end.js
new file mode 100644
index 0000000..07aeac4
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js b/node_modules/elementtree/node_modules/sax/test/cdata-multiple.js
new file mode 100644
index 0000000..dab2015
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/cdata.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/cdata.js b/node_modules/elementtree/node_modules/sax/test/cdata.js
new file mode 100644
index 0000000..0f09cce
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/index.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/index.js b/node_modules/elementtree/node_modules/sax/test/index.js
new file mode 100644
index 0000000..d4e1ef4
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/issue-23.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/issue-23.js b/node_modules/elementtree/node_modules/sax/test/issue-23.js
new file mode 100644
index 0000000..e7991b2
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/issue-30.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/issue-30.js b/node_modules/elementtree/node_modules/sax/test/issue-30.js
new file mode 100644
index 0000000..c2cc809
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/issue-35.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/issue-35.js b/node_modules/elementtree/node_modules/sax/test/issue-35.js
new file mode 100644
index 0000000..7c521c5
--- /dev/null
+++ b/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>&#Xd;&#X0d;\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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/issue-47.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/issue-47.js b/node_modules/elementtree/node_modules/sax/test/issue-47.js
new file mode 100644
index 0000000..911c7d0
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/issue-49.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/issue-49.js b/node_modules/elementtree/node_modules/sax/test/issue-49.js
new file mode 100644
index 0000000..2964325
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/parser-position.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/parser-position.js b/node_modules/elementtree/node_modules/sax/test/parser-position.js
new file mode 100644
index 0000000..e4a68b1
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/script.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/script.js b/node_modules/elementtree/node_modules/sax/test/script.js
new file mode 100644
index 0000000..464c051
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js b/node_modules/elementtree/node_modules/sax/test/self-closing-child-strict.js
new file mode 100644
index 0000000..ce9c045
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/self-closing-child.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/self-closing-child.js b/node_modules/elementtree/node_modules/sax/test/self-closing-child.js
new file mode 100644
index 0000000..bc6b52b
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js b/node_modules/elementtree/node_modules/sax/test/self-closing-tag.js
new file mode 100644
index 0000000..b2c5736
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/stray-ending.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/stray-ending.js b/node_modules/elementtree/node_modules/sax/test/stray-ending.js
new file mode 100644
index 0000000..6b0aa7f
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js b/node_modules/elementtree/node_modules/sax/test/trailing-non-whitespace.js
new file mode 100644
index 0000000..3e1fb2e
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/unquoted.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/unquoted.js b/node_modules/elementtree/node_modules/sax/test/unquoted.js
new file mode 100644
index 0000000..79f1d0b
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js b/node_modules/elementtree/node_modules/sax/test/xmlns-issue-41.js
new file mode 100644
index 0000000..596d82b
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js b/node_modules/elementtree/node_modules/sax/test/xmlns-rebinding.js
new file mode 100644
index 0000000..f464876
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js b/node_modules/elementtree/node_modules/sax/test/xmlns-strict.js
new file mode 100644
index 0000000..4ad615b
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js b/node_modules/elementtree/node_modules/sax/test/xmlns-unbound.js
new file mode 100644
index 0000000..2944b87
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js b/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js
new file mode 100644
index 0000000..16da771
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js b/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-prefix.js
new file mode 100644
index 0000000..9a1ce1b
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js b/node_modules/elementtree/node_modules/sax/test/xmlns-xml-default-redefine.js
new file mode 100644
index 0000000..1eba9c7
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/package.json
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/package.json b/node_modules/elementtree/package.json
new file mode 100644
index 0000000..78938f1
--- /dev/null
+++ b/node_modules/elementtree/package.json
@@ -0,0 +1,75 @@
+{
+  "author": {
+    "name": "Rackspace US, Inc."
+  },
+  "contributors": [
+    {
+      "name": "Paul Querna",
+      "email": "paul.querna@rackspace.com"
+    },
+    {
+      "name": "Tomaz Muraus",
+      "email": "tomaz.muraus@rackspace.com"
+    }
+  ],
+  "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": "elementtree@0.1.6",
+  "dist": {
+    "shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c",
+    "tarball": "http://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz"
+  },
+  "_from": "elementtree@*",
+  "_npmVersion": "1.3.24",
+  "_npmUser": {
+    "name": "rphillips",
+    "email": "ryan@trolocsis.com"
+  },
+  "maintainers": [
+    {
+      "name": "rphillips",
+      "email": "ryan@trolocsis.com"
+    }
+  ],
+  "_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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/tests/data/xml1.xml
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/tests/data/xml1.xml b/node_modules/elementtree/tests/data/xml1.xml
new file mode 100644
index 0000000..72c33ae
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/tests/data/xml2.xml
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/tests/data/xml2.xml b/node_modules/elementtree/tests/data/xml2.xml
new file mode 100644
index 0000000..5f94bbd
--- /dev/null
+++ b/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-ubuntu/blob/ad0cc0bd/node_modules/elementtree/tests/test-simple.js
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/tests/test-simple.js b/node_modules/elementtree/tests/test-simple.js
new file mode 100644
index 0000000..1fc04b8
--- /dev/null
+++ b/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 &amp; Test &amp; 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>&amp;&amp;&amp;&amp;&lt;&gt;\"\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-ubuntu/blob/ad0cc0bd/node_modules/optimist/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/optimist/.travis.yml b/node_modules/optimist/.travis.yml
new file mode 100644
index 0000000..cc4dba2
--- /dev/null
+++ b/node_modules/optimist/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+  - "0.8"
+  - "0.10"

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/optimist/LICENSE b/node_modules/optimist/LICENSE
new file mode 100644
index 0000000..432d1ae
--- /dev/null
+++ b/node_modules/optimist/LICENSE
@@ -0,0 +1,21 @@
+Copyright 2010 James Halliday (mail@substack.net)
+
+This project is free software released under the MIT/X11 license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/bool.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/bool.js b/node_modules/optimist/example/bool.js
new file mode 100644
index 0000000..a998fb7
--- /dev/null
+++ b/node_modules/optimist/example/bool.js
@@ -0,0 +1,10 @@
+#!/usr/bin/env node
+var util = require('util');
+var argv = require('optimist').argv;
+
+if (argv.s) {
+    util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');
+}
+console.log(
+    (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')
+);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/boolean_double.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/boolean_double.js b/node_modules/optimist/example/boolean_double.js
new file mode 100644
index 0000000..a35a7e6
--- /dev/null
+++ b/node_modules/optimist/example/boolean_double.js
@@ -0,0 +1,7 @@
+#!/usr/bin/env node
+var argv = require('optimist')
+    .boolean(['x','y','z'])
+    .argv
+;
+console.dir([ argv.x, argv.y, argv.z ]);
+console.dir(argv._);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/boolean_single.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/boolean_single.js b/node_modules/optimist/example/boolean_single.js
new file mode 100644
index 0000000..017bb68
--- /dev/null
+++ b/node_modules/optimist/example/boolean_single.js
@@ -0,0 +1,7 @@
+#!/usr/bin/env node
+var argv = require('optimist')
+    .boolean('v')
+    .argv
+;
+console.dir(argv.v);
+console.dir(argv._);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/default_hash.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/default_hash.js b/node_modules/optimist/example/default_hash.js
new file mode 100644
index 0000000..ade7768
--- /dev/null
+++ b/node_modules/optimist/example/default_hash.js
@@ -0,0 +1,8 @@
+#!/usr/bin/env node
+
+var argv = require('optimist')
+    .default({ x : 10, y : 10 })
+    .argv
+;
+
+console.log(argv.x + argv.y);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/default_singles.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/default_singles.js b/node_modules/optimist/example/default_singles.js
new file mode 100644
index 0000000..d9b1ff4
--- /dev/null
+++ b/node_modules/optimist/example/default_singles.js
@@ -0,0 +1,7 @@
+#!/usr/bin/env node
+var argv = require('optimist')
+    .default('x', 10)
+    .default('y', 10)
+    .argv
+;
+console.log(argv.x + argv.y);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/divide.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/divide.js b/node_modules/optimist/example/divide.js
new file mode 100644
index 0000000..5e2ee82
--- /dev/null
+++ b/node_modules/optimist/example/divide.js
@@ -0,0 +1,8 @@
+#!/usr/bin/env node
+
+var argv = require('optimist')
+    .usage('Usage: $0 -x [num] -y [num]')
+    .demand(['x','y'])
+    .argv;
+
+console.log(argv.x / argv.y);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/line_count.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/line_count.js b/node_modules/optimist/example/line_count.js
new file mode 100644
index 0000000..b5f95bf
--- /dev/null
+++ b/node_modules/optimist/example/line_count.js
@@ -0,0 +1,20 @@
+#!/usr/bin/env node
+var argv = require('optimist')
+    .usage('Count the lines in a file.\nUsage: $0')
+    .demand('f')
+    .alias('f', 'file')
+    .describe('f', 'Load a file')
+    .argv
+;
+
+var fs = require('fs');
+var s = fs.createReadStream(argv.file);
+
+var lines = 0;
+s.on('data', function (buf) {
+    lines += buf.toString().match(/\n/g).length;
+});
+
+s.on('end', function () {
+    console.log(lines);
+});

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/line_count_options.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/line_count_options.js b/node_modules/optimist/example/line_count_options.js
new file mode 100644
index 0000000..d9ac709
--- /dev/null
+++ b/node_modules/optimist/example/line_count_options.js
@@ -0,0 +1,29 @@
+#!/usr/bin/env node
+var argv = require('optimist')
+    .usage('Count the lines in a file.\nUsage: $0')
+    .options({
+        file : {
+            demand : true,
+            alias : 'f',
+            description : 'Load a file'
+        },
+        base : {
+            alias : 'b',
+            description : 'Numeric base to use for output',
+            default : 10,
+        },
+    })
+    .argv
+;
+
+var fs = require('fs');
+var s = fs.createReadStream(argv.file);
+
+var lines = 0;
+s.on('data', function (buf) {
+    lines += buf.toString().match(/\n/g).length;
+});
+
+s.on('end', function () {
+    console.log(lines.toString(argv.base));
+});

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/line_count_wrap.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/line_count_wrap.js b/node_modules/optimist/example/line_count_wrap.js
new file mode 100644
index 0000000..4267511
--- /dev/null
+++ b/node_modules/optimist/example/line_count_wrap.js
@@ -0,0 +1,29 @@
+#!/usr/bin/env node
+var argv = require('optimist')
+    .usage('Count the lines in a file.\nUsage: $0')
+    .wrap(80)
+    .demand('f')
+    .alias('f', [ 'file', 'filename' ])
+    .describe('f',
+        "Load a file. It's pretty important."
+        + " Required even. So you'd better specify it."
+    )
+    .alias('b', 'base')
+    .describe('b', 'Numeric base to display the number of lines in')
+    .default('b', 10)
+    .describe('x', 'Super-secret optional parameter which is secret')
+    .default('x', '')
+    .argv
+;
+
+var fs = require('fs');
+var s = fs.createReadStream(argv.file);
+
+var lines = 0;
+s.on('data', function (buf) {
+    lines += buf.toString().match(/\n/g).length;
+});
+
+s.on('end', function () {
+    console.log(lines.toString(argv.base));
+});

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/nonopt.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/nonopt.js b/node_modules/optimist/example/nonopt.js
new file mode 100644
index 0000000..ee633ee
--- /dev/null
+++ b/node_modules/optimist/example/nonopt.js
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+var argv = require('optimist').argv;
+console.log('(%d,%d)', argv.x, argv.y);
+console.log(argv._);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/reflect.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/reflect.js b/node_modules/optimist/example/reflect.js
new file mode 100644
index 0000000..816b3e1
--- /dev/null
+++ b/node_modules/optimist/example/reflect.js
@@ -0,0 +1,2 @@
+#!/usr/bin/env node
+console.dir(require('optimist').argv);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/short.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/short.js b/node_modules/optimist/example/short.js
new file mode 100644
index 0000000..1db0ad0
--- /dev/null
+++ b/node_modules/optimist/example/short.js
@@ -0,0 +1,3 @@
+#!/usr/bin/env node
+var argv = require('optimist').argv;
+console.log('(%d,%d)', argv.x, argv.y);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/string.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/string.js b/node_modules/optimist/example/string.js
new file mode 100644
index 0000000..a8e5aeb
--- /dev/null
+++ b/node_modules/optimist/example/string.js
@@ -0,0 +1,11 @@
+#!/usr/bin/env node
+var argv = require('optimist')
+    .string('x', 'y')
+    .argv
+;
+console.dir([ argv.x, argv.y ]);
+
+/* Turns off numeric coercion:
+    ./node string.js -x 000123 -y 9876
+    [ '000123', '9876' ]
+*/

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/usage-options.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/usage-options.js b/node_modules/optimist/example/usage-options.js
new file mode 100644
index 0000000..b999977
--- /dev/null
+++ b/node_modules/optimist/example/usage-options.js
@@ -0,0 +1,19 @@
+var optimist = require('./../index');
+
+var argv = optimist.usage('This is my awesome program', {
+  'about': {
+    description: 'Provide some details about the author of this program',
+    required: true,
+    short: 'a',
+  },
+  'info': {
+    description: 'Provide some information about the node.js agains!!!!!!',
+    boolean: true,
+    short: 'i'
+  }
+}).argv;
+
+optimist.showHelp();
+
+console.log('\n\nInspecting options');
+console.dir(argv);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/example/xup.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/example/xup.js b/node_modules/optimist/example/xup.js
new file mode 100644
index 0000000..8f6ecd2
--- /dev/null
+++ b/node_modules/optimist/example/xup.js
@@ -0,0 +1,10 @@
+#!/usr/bin/env node
+var argv = require('optimist').argv;
+
+if (argv.rif - 5 * argv.xup > 7.138) {
+    console.log('Buy more riffiwobbles');
+}
+else {
+    console.log('Sell the xupptumblers');
+}
+

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/index.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/index.js b/node_modules/optimist/index.js
new file mode 100644
index 0000000..4da5a6d
--- /dev/null
+++ b/node_modules/optimist/index.js
@@ -0,0 +1,343 @@
+var path = require('path');
+var minimist = require('minimist');
+var wordwrap = require('wordwrap');
+
+/*  Hack an instance of Argv with process.argv into Argv
+    so people can do
+        require('optimist')(['--beeble=1','-z','zizzle']).argv
+    to parse a list of args and
+        require('optimist').argv
+    to get a parsed version of process.argv.
+*/
+
+var inst = Argv(process.argv.slice(2));
+Object.keys(inst).forEach(function (key) {
+    Argv[key] = typeof inst[key] == 'function'
+        ? inst[key].bind(inst)
+        : inst[key];
+});
+
+var exports = module.exports = Argv;
+function Argv (processArgs, cwd) {
+    var self = {};
+    if (!cwd) cwd = process.cwd();
+    
+    self.$0 = process.argv
+        .slice(0,2)
+        .map(function (x) {
+            var b = rebase(cwd, x);
+            return x.match(/^\//) && b.length < x.length
+                ? b : x
+        })
+        .join(' ')
+    ;
+    
+    if (process.env._ != undefined && process.argv[1] == process.env._) {
+        self.$0 = process.env._.replace(
+            path.dirname(process.execPath) + '/', ''
+        );
+    }
+    
+    var options = {
+        boolean: [],
+        string: [],
+        alias: {},
+        default: []
+    };
+    
+    self.boolean = function (bools) {
+        options.boolean.push.apply(options.boolean, [].concat(bools));
+        return self;
+    };
+    
+    self.string = function (strings) {
+        options.string.push.apply(options.string, [].concat(strings));
+        return self;
+    };
+    
+    self.default = function (key, value) {
+        if (typeof key === 'object') {
+            Object.keys(key).forEach(function (k) {
+                self.default(k, key[k]);
+            });
+        }
+        else {
+            options.default[key] = value;
+        }
+        return self;
+    };
+    
+    self.alias = function (x, y) {
+        if (typeof x === 'object') {
+            Object.keys(x).forEach(function (key) {
+                self.alias(key, x[key]);
+            });
+        }
+        else {
+            options.alias[x] = (options.alias[x] || []).concat(y);
+        }
+        return self;
+    };
+    
+    var demanded = {};
+    self.demand = function (keys) {
+        if (typeof keys == 'number') {
+            if (!demanded._) demanded._ = 0;
+            demanded._ += keys;
+        }
+        else if (Array.isArray(keys)) {
+            keys.forEach(function (key) {
+                self.demand(key);
+            });
+        }
+        else {
+            demanded[keys] = true;
+        }
+        
+        return self;
+    };
+    
+    var usage;
+    self.usage = function (msg, opts) {
+        if (!opts && typeof msg === 'object') {
+            opts = msg;
+            msg = null;
+        }
+        
+        usage = msg;
+        
+        if (opts) self.options(opts);
+        
+        return self;
+    };
+    
+    function fail (msg) {
+        self.showHelp();
+        if (msg) console.error(msg);
+        process.exit(1);
+    }
+    
+    var checks = [];
+    self.check = function (f) {
+        checks.push(f);
+        return self;
+    };
+    
+    var descriptions = {};
+    self.describe = function (key, desc) {
+        if (typeof key === 'object') {
+            Object.keys(key).forEach(function (k) {
+                self.describe(k, key[k]);
+            });
+        }
+        else {
+            descriptions[key] = desc;
+        }
+        return self;
+    };
+    
+    self.parse = function (args) {
+        return parseArgs(args);
+    };
+    
+    self.option = self.options = function (key, opt) {
+        if (typeof key === 'object') {
+            Object.keys(key).forEach(function (k) {
+                self.options(k, key[k]);
+            });
+        }
+        else {
+            if (opt.alias) self.alias(key, opt.alias);
+            if (opt.demand) self.demand(key);
+            if (typeof opt.default !== 'undefined') {
+                self.default(key, opt.default);
+            }
+            
+            if (opt.boolean || opt.type === 'boolean') {
+                self.boolean(key);
+            }
+            if (opt.string || opt.type === 'string') {
+                self.string(key);
+            }
+            
+            var desc = opt.describe || opt.description || opt.desc;
+            if (desc) {
+                self.describe(key, desc);
+            }
+        }
+        
+        return self;
+    };
+    
+    var wrap = null;
+    self.wrap = function (cols) {
+        wrap = cols;
+        return self;
+    };
+    
+    self.showHelp = function (fn) {
+        if (!fn) fn = console.error;
+        fn(self.help());
+    };
+    
+    self.help = function () {
+        var keys = Object.keys(
+            Object.keys(descriptions)
+            .concat(Object.keys(demanded))
+            .concat(Object.keys(options.default))
+            .reduce(function (acc, key) {
+                if (key !== '_') acc[key] = true;
+                return acc;
+            }, {})
+        );
+        
+        var help = keys.length ? [ 'Options:' ] : [];
+        
+        if (usage) {
+            help.unshift(usage.replace(/\$0/g, self.$0), '');
+        }
+        
+        var switches = keys.reduce(function (acc, key) {
+            acc[key] = [ key ].concat(options.alias[key] || [])
+                .map(function (sw) {
+                    return (sw.length > 1 ? '--' : '-') + sw
+                })
+                .join(', ')
+            ;
+            return acc;
+        }, {});
+        
+        var switchlen = longest(Object.keys(switches).map(function (s) {
+            return switches[s] || '';
+        }));
+        
+        var desclen = longest(Object.keys(descriptions).map(function (d) { 
+            return descriptions[d] || '';
+        }));
+        
+        keys.forEach(function (key) {
+            var kswitch = switches[key];
+            var desc = descriptions[key] || '';
+            
+            if (wrap) {
+                desc = wordwrap(switchlen + 4, wrap)(desc)
+                    .slice(switchlen + 4)
+                ;
+            }
+            
+            var spadding = new Array(
+                Math.max(switchlen - kswitch.length + 3, 0)
+            ).join(' ');
+            
+            var dpadding = new Array(
+                Math.max(desclen - desc.length + 1, 0)
+            ).join(' ');
+            
+            var type = null;
+            
+            if (options.boolean[key]) type = '[boolean]';
+            if (options.string[key]) type = '[string]';
+            
+            if (!wrap && dpadding.length > 0) {
+                desc += dpadding;
+            }
+            
+            var prelude = '  ' + kswitch + spadding;
+            var extra = [
+                type,
+                demanded[key]
+                    ? '[required]'
+                    : null
+                ,
+                options.default[key] !== undefined
+                    ? '[default: ' + JSON.stringify(options.default[key]) + ']'
+                    : null
+                ,
+            ].filter(Boolean).join('  ');
+            
+            var body = [ desc, extra ].filter(Boolean).join('  ');
+            
+            if (wrap) {
+                var dlines = desc.split('\n');
+                var dlen = dlines.slice(-1)[0].length
+                    + (dlines.length === 1 ? prelude.length : 0)
+                
+                body = desc + (dlen + extra.length > wrap - 2
+                    ? '\n'
+                        + new Array(wrap - extra.length + 1).join(' ')
+                        + extra
+                    : new Array(wrap - extra.length - dlen + 1).join(' ')
+                        + extra
+                );
+            }
+            
+            help.push(prelude + body);
+        });
+        
+        help.push('');
+        return help.join('\n');
+    };
+    
+    Object.defineProperty(self, 'argv', {
+        get : function () { return parseArgs(processArgs) },
+        enumerable : true,
+    });
+    
+    function parseArgs (args) {
+        var argv = minimist(args, options);
+        argv.$0 = self.$0;
+        
+        if (demanded._ && argv._.length < demanded._) {
+            fail('Not enough non-option arguments: got '
+                + argv._.length + ', need at least ' + demanded._
+            );
+        }
+        
+        var missing = [];
+        Object.keys(demanded).forEach(function (key) {
+            if (!argv[key]) missing.push(key);
+        });
+        
+        if (missing.length) {
+            fail('Missing required arguments: ' + missing.join(', '));
+        }
+        
+        checks.forEach(function (f) {
+            try {
+                if (f(argv) === false) {
+                    fail('Argument check failed: ' + f.toString());
+                }
+            }
+            catch (err) {
+                fail(err)
+            }
+        });
+        
+        return argv;
+    }
+    
+    function longest (xs) {
+        return Math.max.apply(
+            null,
+            xs.map(function (x) { return x.length })
+        );
+    }
+    
+    return self;
+};
+
+// rebase an absolute path to a relative one with respect to a base directory
+// exported for tests
+exports.rebase = rebase;
+function rebase (base, dir) {
+    var ds = path.normalize(dir).split('/').slice(1);
+    var bs = path.normalize(base).split('/').slice(1);
+    
+    for (var i = 0; ds[i] && ds[i] == bs[i]; i++);
+    ds.splice(0, i); bs.splice(0, i);
+    
+    var p = path.normalize(
+        bs.map(function () { return '..' }).concat(ds).join('/')
+    ).replace(/\/$/,'').replace(/^$/, '.');
+    return p.match(/^[.\/]/) ? p : './' + p;
+};

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/node_modules/minimist/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/optimist/node_modules/minimist/.travis.yml b/node_modules/optimist/node_modules/minimist/.travis.yml
new file mode 100644
index 0000000..cc4dba2
--- /dev/null
+++ b/node_modules/optimist/node_modules/minimist/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+  - "0.8"
+  - "0.10"

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/node_modules/minimist/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/optimist/node_modules/minimist/LICENSE b/node_modules/optimist/node_modules/minimist/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/node_modules/optimist/node_modules/minimist/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/node_modules/minimist/example/parse.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/node_modules/minimist/example/parse.js b/node_modules/optimist/node_modules/minimist/example/parse.js
new file mode 100644
index 0000000..abff3e8
--- /dev/null
+++ b/node_modules/optimist/node_modules/minimist/example/parse.js
@@ -0,0 +1,2 @@
+var argv = require('../')(process.argv.slice(2));
+console.dir(argv);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/node_modules/minimist/index.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/node_modules/minimist/index.js b/node_modules/optimist/node_modules/minimist/index.js
new file mode 100644
index 0000000..71fb830
--- /dev/null
+++ b/node_modules/optimist/node_modules/minimist/index.js
@@ -0,0 +1,187 @@
+module.exports = function (args, opts) {
+    if (!opts) opts = {};
+    
+    var flags = { bools : {}, strings : {} };
+    
+    [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
+        flags.bools[key] = true;
+    });
+    
+    var aliases = {};
+    Object.keys(opts.alias || {}).forEach(function (key) {
+        aliases[key] = [].concat(opts.alias[key]);
+        aliases[key].forEach(function (x) {
+            aliases[x] = [key].concat(aliases[key].filter(function (y) {
+                return x !== y;
+            }));
+        });
+    });
+
+    [].concat(opts.string).filter(Boolean).forEach(function (key) {
+        flags.strings[key] = true;
+        if (aliases[key]) {
+            flags.strings[aliases[key]] = true;
+        }
+     });
+
+    var defaults = opts['default'] || {};
+    
+    var argv = { _ : [] };
+    Object.keys(flags.bools).forEach(function (key) {
+        setArg(key, defaults[key] === undefined ? false : defaults[key]);
+    });
+    
+    var notFlags = [];
+
+    if (args.indexOf('--') !== -1) {
+        notFlags = args.slice(args.indexOf('--')+1);
+        args = args.slice(0, args.indexOf('--'));
+    }
+
+    function setArg (key, val) {
+        var value = !flags.strings[key] && isNumber(val)
+            ? Number(val) : val
+        ;
+        setKey(argv, key.split('.'), value);
+        
+        (aliases[key] || []).forEach(function (x) {
+            setKey(argv, x.split('.'), value);
+        });
+    }
+    
+    for (var i = 0; i < args.length; i++) {
+        var arg = args[i];
+        
+        if (/^--.+=/.test(arg)) {
+            // Using [\s\S] instead of . because js doesn't support the
+            // 'dotall' regex modifier. See:
+            // http://stackoverflow.com/a/1068308/13216
+            var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
+            setArg(m[1], m[2]);
+        }
+        else if (/^--no-.+/.test(arg)) {
+            var key = arg.match(/^--no-(.+)/)[1];
+            setArg(key, false);
+        }
+        else if (/^--.+/.test(arg)) {
+            var key = arg.match(/^--(.+)/)[1];
+            var next = args[i + 1];
+            if (next !== undefined && !/^-/.test(next)
+            && !flags.bools[key]
+            && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+                setArg(key, next);
+                i++;
+            }
+            else if (/^(true|false)$/.test(next)) {
+                setArg(key, next === 'true');
+                i++;
+            }
+            else {
+                setArg(key, flags.strings[key] ? '' : true);
+            }
+        }
+        else if (/^-[^-]+/.test(arg)) {
+            var letters = arg.slice(1,-1).split('');
+            
+            var broken = false;
+            for (var j = 0; j < letters.length; j++) {
+                var next = arg.slice(j+2);
+                
+                if (next === '-') {
+                    setArg(letters[j], next)
+                    continue;
+                }
+                
+                if (/[A-Za-z]/.test(letters[j])
+                && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
+                    setArg(letters[j], next);
+                    broken = true;
+                    break;
+                }
+                
+                if (letters[j+1] && letters[j+1].match(/\W/)) {
+                    setArg(letters[j], arg.slice(j+2));
+                    broken = true;
+                    break;
+                }
+                else {
+                    setArg(letters[j], flags.strings[letters[j]] ? '' : true);
+                }
+            }
+            
+            var key = arg.slice(-1)[0];
+            if (!broken && key !== '-') {
+                if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])
+                && !flags.bools[key]
+                && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+                    setArg(key, args[i+1]);
+                    i++;
+                }
+                else if (args[i+1] && /true|false/.test(args[i+1])) {
+                    setArg(key, args[i+1] === 'true');
+                    i++;
+                }
+                else {
+                    setArg(key, flags.strings[key] ? '' : true);
+                }
+            }
+        }
+        else {
+            argv._.push(
+                flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
+            );
+        }
+    }
+    
+    Object.keys(defaults).forEach(function (key) {
+        if (!hasKey(argv, key.split('.'))) {
+            setKey(argv, key.split('.'), defaults[key]);
+            
+            (aliases[key] || []).forEach(function (x) {
+                setKey(argv, x.split('.'), defaults[key]);
+            });
+        }
+    });
+    
+    notFlags.forEach(function(key) {
+        argv._.push(key);
+    });
+
+    return argv;
+};
+
+function hasKey (obj, keys) {
+    var o = obj;
+    keys.slice(0,-1).forEach(function (key) {
+        o = (o[key] || {});
+    });
+
+    var key = keys[keys.length - 1];
+    return key in o;
+}
+
+function setKey (obj, keys, value) {
+    var o = obj;
+    keys.slice(0,-1).forEach(function (key) {
+        if (o[key] === undefined) o[key] = {};
+        o = o[key];
+    });
+    
+    var key = keys[keys.length - 1];
+    if (o[key] === undefined || typeof o[key] === 'boolean') {
+        o[key] = value;
+    }
+    else if (Array.isArray(o[key])) {
+        o[key].push(value);
+    }
+    else {
+        o[key] = [ o[key], value ];
+    }
+}
+
+function isNumber (x) {
+    if (typeof x === 'number') return true;
+    if (/^0x[0-9a-f]+$/i.test(x)) return true;
+    return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
+}
+

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/node_modules/minimist/package.json
----------------------------------------------------------------------
diff --git a/node_modules/optimist/node_modules/minimist/package.json b/node_modules/optimist/node_modules/minimist/package.json
new file mode 100644
index 0000000..6c08d0a
--- /dev/null
+++ b/node_modules/optimist/node_modules/minimist/package.json
@@ -0,0 +1,67 @@
+{
+  "name": "minimist",
+  "version": "0.0.10",
+  "description": "parse argument options",
+  "main": "index.js",
+  "devDependencies": {
+    "tape": "~1.0.4",
+    "tap": "~0.4.0"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "testling": {
+    "files": "test/*.js",
+    "browsers": [
+      "ie/6..latest",
+      "ff/5",
+      "firefox/latest",
+      "chrome/10",
+      "chrome/latest",
+      "safari/5.1",
+      "safari/latest",
+      "opera/12"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/substack/minimist.git"
+  },
+  "homepage": "https://github.com/substack/minimist",
+  "keywords": [
+    "argv",
+    "getopt",
+    "parser",
+    "optimist"
+  ],
+  "author": {
+    "name": "James Halliday",
+    "email": "mail@substack.net",
+    "url": "http://substack.net"
+  },
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/substack/minimist/issues"
+  },
+  "_id": "minimist@0.0.10",
+  "dist": {
+    "shasum": "de3f98543dbf96082be48ad1a0c7cda836301dcf",
+    "tarball": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz"
+  },
+  "_from": "minimist@>=0.0.1 <0.1.0",
+  "_npmVersion": "1.4.3",
+  "_npmUser": {
+    "name": "substack",
+    "email": "mail@substack.net"
+  },
+  "maintainers": [
+    {
+      "name": "substack",
+      "email": "mail@substack.net"
+    }
+  ],
+  "directories": {},
+  "_shasum": "de3f98543dbf96082be48ad1a0c7cda836301dcf",
+  "_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+  "readme": "ERROR: No README data found!"
+}

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/node_modules/minimist/readme.markdown
----------------------------------------------------------------------
diff --git a/node_modules/optimist/node_modules/minimist/readme.markdown b/node_modules/optimist/node_modules/minimist/readme.markdown
new file mode 100644
index 0000000..c256353
--- /dev/null
+++ b/node_modules/optimist/node_modules/minimist/readme.markdown
@@ -0,0 +1,73 @@
+# minimist
+
+parse argument options
+
+This module is the guts of optimist's argument parser without all the
+fanciful decoration.
+
+[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist)
+
+[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist)
+
+# example
+
+``` js
+var argv = require('minimist')(process.argv.slice(2));
+console.dir(argv);
+```
+
+```
+$ node example/parse.js -a beep -b boop
+{ _: [], a: 'beep', b: 'boop' }
+```
+
+```
+$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
+{ _: [ 'foo', 'bar', 'baz' ],
+  x: 3,
+  y: 4,
+  n: 5,
+  a: true,
+  b: true,
+  c: true,
+  beep: 'boop' }
+```
+
+# methods
+
+``` js
+var parseArgs = require('minimist')
+```
+
+## var argv = parseArgs(args, opts={})
+
+Return an argument object `argv` populated with the array arguments from `args`.
+
+`argv._` contains all the arguments that didn't have an option associated with
+them.
+
+Numeric-looking arguments will be returned as numbers unless `opts.string` or
+`opts.boolean` is set for that argument name.
+
+Any arguments after `'--'` will not be parsed and will end up in `argv._`.
+
+options can be:
+
+* `opts.string` - a string or array of strings argument names to always treat as
+strings
+* `opts.boolean` - a string or array of strings to always treat as booleans
+* `opts.alias` - an object mapping string names to strings or arrays of string
+argument names to use as aliases
+* `opts.default` - an object mapping string argument names to default values
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install minimist
+```
+
+# license
+
+MIT

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/ad0cc0bd/node_modules/optimist/node_modules/minimist/test/bool.js
----------------------------------------------------------------------
diff --git a/node_modules/optimist/node_modules/minimist/test/bool.js b/node_modules/optimist/node_modules/minimist/test/bool.js
new file mode 100644
index 0000000..749e083
--- /dev/null
+++ b/node_modules/optimist/node_modules/minimist/test/bool.js
@@ -0,0 +1,119 @@
+var parse = require('../');
+var test = require('tape');
+
+test('flag boolean default false', function (t) {
+    var argv = parse(['moo'], {
+        boolean: ['t', 'verbose'],
+        default: { verbose: false, t: false }
+    });
+    
+    t.deepEqual(argv, {
+        verbose: false,
+        t: false,
+        _: ['moo']
+    });
+    
+    t.deepEqual(typeof argv.verbose, 'boolean');
+    t.deepEqual(typeof argv.t, 'boolean');
+    t.end();
+
+});
+
+test('boolean groups', function (t) {
+    var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], {
+        boolean: ['x','y','z']
+    });
+    
+    t.deepEqual(argv, {
+        x : true,
+        y : false,
+        z : true,
+        _ : [ 'one', 'two', 'three' ]
+    });
+    
+    t.deepEqual(typeof argv.x, 'boolean');
+    t.deepEqual(typeof argv.y, 'boolean');
+    t.deepEqual(typeof argv.z, 'boolean');
+    t.end();
+});
+test('boolean and alias with chainable api', function (t) {
+    var aliased = [ '-h', 'derp' ];
+    var regular = [ '--herp',  'derp' ];
+    var opts = {
+        herp: { alias: 'h', boolean: true }
+    };
+    var aliasedArgv = parse(aliased, {
+        boolean: 'herp',
+        alias: { h: 'herp' }
+    });
+    var propertyArgv = parse(regular, {
+        boolean: 'herp',
+        alias: { h: 'herp' }
+    });
+    var expected = {
+        herp: true,
+        h: true,
+        '_': [ 'derp' ]
+    };
+    
+    t.same(aliasedArgv, expected);
+    t.same(propertyArgv, expected); 
+    t.end();
+});
+
+test('boolean and alias with options hash', function (t) {
+    var aliased = [ '-h', 'derp' ];
+    var regular = [ '--herp', 'derp' ];
+    var opts = {
+        alias: { 'h': 'herp' },
+        boolean: 'herp'
+    };
+    var aliasedArgv = parse(aliased, opts);
+    var propertyArgv = parse(regular, opts);
+    var expected = {
+        herp: true,
+        h: true,
+        '_': [ 'derp' ]
+    };
+    t.same(aliasedArgv, expected);
+    t.same(propertyArgv, expected);
+    t.end();
+});
+
+test('boolean and alias using explicit true', function (t) {
+    var aliased = [ '-h', 'true' ];
+    var regular = [ '--herp',  'true' ];
+    var opts = {
+        alias: { h: 'herp' },
+        boolean: 'h'
+    };
+    var aliasedArgv = parse(aliased, opts);
+    var propertyArgv = parse(regular, opts);
+    var expected = {
+        herp: true,
+        h: true,
+        '_': [ ]
+    };
+
+    t.same(aliasedArgv, expected);
+    t.same(propertyArgv, expected); 
+    t.end();
+});
+
+// regression, see https://github.com/substack/node-optimist/issues/71
+test('boolean and --x=true', function(t) {
+    var parsed = parse(['--boool', '--other=true'], {
+        boolean: 'boool'
+    });
+
+    t.same(parsed.boool, true);
+    t.same(parsed.other, 'true');
+
+    parsed = parse(['--boool', '--other=false'], {
+        boolean: 'boool'
+    });
+    
+    t.same(parsed.boool, true);
+    t.same(parsed.other, 'false');
+    t.end();
+});


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org