You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bh...@apache.org on 2014/03/27 16:08:33 UTC

[19/51] [partial] CB-6346 - Add node_modules to source control

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/jasmine.junit_reporter.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/jasmine.junit_reporter.js b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/jasmine.junit_reporter.js
new file mode 100644
index 0000000..39d0666
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/jasmine.junit_reporter.js
@@ -0,0 +1,200 @@
+(function() {
+
+    if (! jasmine) {
+        throw new Exception("jasmine library does not exist in global namespace!");
+    }
+
+    function elapsed(startTime, endTime) {
+        return (endTime - startTime)/1000;
+    }
+
+    function ISODateString(d) {
+        function pad(n) { return n < 10 ? '0'+n : n; }
+
+        return d.getFullYear() + '-' +
+            pad(d.getMonth()+1) + '-' +
+            pad(d.getDate()) + 'T' +
+            pad(d.getHours()) + ':' +
+            pad(d.getMinutes()) + ':' +
+            pad(d.getSeconds());
+    }
+
+    function trim(str) {
+        return str.replace(/^\s+/, "" ).replace(/\s+$/, "" );
+    }
+
+    function escapeInvalidXmlChars(str) {
+        return str.replace(/\&/g, "&amp;")
+            .replace(/</g, "&lt;")
+            .replace(/\>/g, "&gt;")
+            .replace(/\"/g, "&quot;")
+            .replace(/\'/g, "&apos;");
+    }
+
+    /**
+     * Generates JUnit XML for the given spec run.
+     * Allows the test results to be used in java based CI
+     * systems like CruiseControl and Hudson.
+     *
+     * @param {string} savePath where to save the files
+     * @param {boolean} consolidate whether to save nested describes within the
+     *                  same file as their parent; default: true
+     * @param {boolean} useDotNotation whether to separate suite names with
+     *                  dots rather than spaces (ie "Class.init" not
+     *                  "Class init"); default: true
+     */
+    var JUnitXmlReporter = function(savePath, consolidate, useDotNotation) {
+        this.savePath = savePath || '';
+        this.consolidate = consolidate === jasmine.undefined ? true : consolidate;
+        this.useDotNotation = useDotNotation === jasmine.undefined ? true : useDotNotation;
+    };
+    JUnitXmlReporter.finished_at = null; // will be updated after all files have been written
+
+    JUnitXmlReporter.prototype = {
+        reportSpecStarting: function(spec) {
+            spec.startTime = new Date();
+
+            if (!spec.suite.startTime) {
+                spec.suite.startTime = spec.startTime;
+            }
+        },
+
+        reportSpecResults: function(spec) {
+            var results = spec.results();
+            spec.didFail = !results.passed();
+            spec.duration = elapsed(spec.startTime, new Date());
+            spec.output = '<testcase classname="' + this.getFullName(spec.suite) +
+                '" name="' + escapeInvalidXmlChars(spec.description) + '" time="' + spec.duration + '">';
+
+            var failure = "";
+            var failures = 0;
+            var resultItems = results.getItems();
+            for (var i = 0; i < resultItems.length; i++) {
+                var result = resultItems[i];
+
+                if (result.type == 'expect' && result.passed && !result.passed()) {
+                    failures += 1;
+                    failure += (failures + ": " + escapeInvalidXmlChars(result.message) + " ");
+                }
+            }
+            if (failure) {
+                spec.output += "<failure>" + trim(failure) + "</failure>";
+            }
+            spec.output += "</testcase>";
+        },
+
+        reportSuiteResults: function(suite) {
+            var results = suite.results();
+            var specs = suite.specs();
+            var specOutput = "";
+            // for JUnit results, let's only include directly failed tests (not nested suites')
+            var failedCount = 0;
+
+            suite.status = results.passed() ? 'Passed.' : 'Failed.';
+            if (results.totalCount === 0) { // todo: change this to check results.skipped
+                suite.status = 'Skipped.';
+            }
+
+            // if a suite has no (active?) specs, reportSpecStarting is never called
+            // and thus the suite has no startTime -- account for that here
+            suite.startTime = suite.startTime || new Date();
+            suite.duration = elapsed(suite.startTime, new Date());
+
+            for (var i = 0; i < specs.length; i++) {
+                failedCount += specs[i].didFail ? 1 : 0;
+                specOutput += "\n  " + specs[i].output;
+            }
+            suite.output = '\n<testsuite name="' + this.getFullName(suite) +
+                '" errors="0" tests="' + specs.length + '" failures="' + failedCount +
+                '" time="' + suite.duration + '" timestamp="' + ISODateString(suite.startTime) + '">';
+            suite.output += specOutput;
+            suite.output += "\n</testsuite>";
+        },
+
+        reportRunnerResults: function(runner) {
+            var suites = runner.suites();
+            for (var i = 0; i < suites.length; i++) {
+                var suite = suites[i];
+                var fileName = 'TEST-' + this.getFullName(suite, true) + '.xml';
+                var output = '<?xml version="1.0" encoding="UTF-8" ?>';
+                // if we are consolidating, only write out top-level suites
+                if (this.consolidate && suite.parentSuite) {
+                    continue;
+                }
+                else if (this.consolidate) {
+                    output += "\n<testsuites>";
+                    output += this.getNestedOutput(suite);
+                    output += "\n</testsuites>";
+                    this.writeFile(this.savePath + fileName, output);
+                }
+                else {
+                    output += suite.output;
+                    this.writeFile(this.savePath + fileName, output);
+                }
+            }
+            // When all done, make it known on JUnitXmlReporter
+            JUnitXmlReporter.finished_at = (new Date()).getTime();
+        },
+
+        getNestedOutput: function(suite) {
+            var output = suite.output;
+            for (var i = 0; i < suite.suites().length; i++) {
+                output += this.getNestedOutput(suite.suites()[i]);
+            }
+            return output;
+        },
+
+        writeFile: function(filename, text) {
+            // Rhino
+            try {
+                var out = new java.io.BufferedWriter(new java.io.FileWriter(filename));
+                out.write(text);
+                out.close();
+                return;
+            } catch (e) {}
+            // PhantomJS, via a method injected by phantomjs-testrunner.js
+            try {
+                __phantom_writeFile(filename, text);
+                return;
+            } catch (f) {}
+            // Node.js
+            try {
+                var fs = require("fs");
+                var fd = fs.openSync(filename, "w");
+                fs.writeSync(fd, text, 0);
+                fs.closeSync(fd);
+                return;
+            } catch (g) {}
+        },
+
+        getFullName: function(suite, isFilename) {
+            var fullName;
+            if (this.useDotNotation) {
+                fullName = suite.description;
+                for (var parentSuite = suite.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
+                    fullName = parentSuite.description + '.' + fullName;
+                }
+            }
+            else {
+                fullName = suite.getFullName();
+            }
+
+            // Either remove or escape invalid XML characters
+            if (isFilename) {
+                return fullName.replace(/[^\w]/g, "");
+            }
+            return escapeInvalidXmlChars(fullName);
+        },
+
+        log: function(str) {
+            var console = jasmine.getGlobal().console;
+
+            if (console && console.log) {
+                console.log(str);
+            }
+        }
+    };
+
+    // export public
+    jasmine.JUnitXmlReporter = JUnitXmlReporter;
+})();

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/jasmine.teamcity_reporter.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/jasmine.teamcity_reporter.js b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/jasmine.teamcity_reporter.js
new file mode 100644
index 0000000..e96e072
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/jasmine.teamcity_reporter.js
@@ -0,0 +1,139 @@
+(function() {
+    if (! jasmine) {
+        throw new Exception("jasmine library does not exist in global namespace!");
+    }
+
+    /**
+     * Basic reporter that outputs spec results to for the Teamcity build system
+     *
+     * Usage:
+     *
+     * jasmine.getEnv().addReporter(new jasmine.TeamcityReporter());
+     * jasmine.getEnv().execute();
+     */
+    var TeamcityReporter = function() {
+        this.started = false;
+        this.finished = false;
+    };
+
+    TeamcityReporter.prototype = {
+        reportRunnerResults: function(runner) { },
+
+        reportRunnerStarting: function(runner) { },
+
+        reportSpecResults: function(spec) { },
+
+        reportSpecStarting: function(spec) { },
+
+        reportSuiteResults: function(suite) {
+            var results = suite.results();
+            var path = [];
+            while(suite) {
+                path.unshift(suite.description);
+                suite = suite.parentSuite;
+            }
+            var description = path.join(' ');
+
+            this.log("##teamcity[testSuiteStarted name='" + this.escapeTeamcityString(description) + "']");
+
+            var outerThis = this;
+            var eachSpecFn = function(spec){
+                if (spec.description) {
+                    outerThis.log("##teamcity[testStarted name='" + outerThis.escapeTeamcityString(spec.description) + "' captureStandardOutput='true']");
+                    var specResultFn = function(result){
+                        if (!result.passed_) {
+                            outerThis.log("##teamcity[testFailed name='" + outerThis.escapeTeamcityString(spec.description) + "' message='|[FAILED|]' details='" + outerThis.escapeTeamcityString(result.trace.stack) + "']");
+                        }
+                    };
+
+                    for (var j = 0, jlen = spec.items_.length; j < jlen; j++) {
+                        specResultFn(spec.items_[j]);
+                    }
+                    outerThis.log("##teamcity[testFinished name='" + outerThis.escapeTeamcityString(spec.description) + "']");
+                }
+            };
+            for (var i = 0, ilen = results.items_.length; i < ilen; i++) {
+                eachSpecFn(results.items_[i]);
+            }
+
+
+
+            this.log("##teamcity[testSuiteFinished name='" + outerThis.escapeTeamcityString(description) + "']");
+        },
+
+        log: function(str) {
+            var console = jasmine.getGlobal().console;
+            if (console && console.log) {
+                console.log(str);
+            }
+        },
+
+        hasGroupedConsole: function() {
+            var console = jasmine.getGlobal().console;
+            return console && console.info && console.warn && console.group && console.groupEnd && console.groupCollapsed;
+        },
+
+        escapeTeamcityString: function(message) {
+            if(!message) {
+                return "";
+            }
+
+            return message.replace(/\|/g, "||")
+                          .replace(/\'/g, "|'")
+                          .replace(/\n/g, "|n")
+                          .replace(/\r/g, "|r")
+                          .replace(/\u0085/g, "|x")
+                          .replace(/\u2028/g, "|l")
+                          .replace(/\u2029/g, "|p")
+                          .replace(/\[/g, "|[")
+                          .replace(/]/g, "|]");
+        }
+    };
+
+    function suiteResults(suite) {
+        console.group(suite.description);
+        var specs = suite.specs();
+        for (var i in specs) {
+            if (specs.hasOwnProperty(i)) {
+                specResults(specs[i]);
+            }
+        }
+        var suites = suite.suites();
+        for (var j in suites) {
+            if (suites.hasOwnProperty(j)) {
+                suiteResults(suites[j]);
+            }
+        }
+        console.groupEnd();
+    }
+
+    function specResults(spec) {
+        var results = spec.results();
+        if (results.passed() && console.groupCollapsed) {
+            console.groupCollapsed(spec.description);
+        } else {
+            console.group(spec.description);
+        }
+        var items = results.getItems();
+        for (var k in items) {
+            if (items.hasOwnProperty(k)) {
+                itemResults(items[k]);
+            }
+        }
+        console.groupEnd();
+    }
+
+    function itemResults(item) {
+        if (item.passed && !item.passed()) {
+            console.warn({actual:item.actual,expected: item.expected});
+            item.trace.message = item.matcherName;
+            console.error(item.trace);
+        } else {
+            console.info('Passed');
+        }
+    }
+
+    // export public
+    jasmine.TeamcityReporter = TeamcityReporter;
+})();
+

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/load_reporters.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/load_reporters.js b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/load_reporters.js
new file mode 100644
index 0000000..3b4a742
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/src/load_reporters.js
@@ -0,0 +1,3 @@
+require("./jasmine.console_reporter.js")
+require("./jasmine.junit_reporter.js")
+require("./jasmine.teamcity_reporter.js")

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/JUnitXmlReporterSpec.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/JUnitXmlReporterSpec.js b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/JUnitXmlReporterSpec.js
new file mode 100644
index 0000000..e76d7fb
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/JUnitXmlReporterSpec.js
@@ -0,0 +1,214 @@
+(function(){
+    var env, spec, suite, reporter, runner;
+    function fakeSpec(suite, name) {
+        var s = new jasmine.Spec(env, suite, name);
+        suite.add(s);
+        return s;
+    }
+    function fakeSuite(name, parentSuite) {
+        var s = new jasmine.Suite(env, name, null, parentSuite || null);
+        if (parentSuite) {
+            parentSuite.add(s);
+        }
+        runner.add(s);
+        return s;
+    }
+
+    // make sure reporter is set before calling this
+    function triggerSuiteEvents(suites) {
+        for (var i=0; i<suites.length; i++) {
+            var s = suites[i];
+            for (var j=0; j<s.specs().length; j++) {
+                reporter.reportSpecStarting(s.specs()[j]);
+                reporter.reportSpecResults(s.specs()[j]);
+            }
+            reporter.reportSuiteResults(s);
+        }
+    }
+
+    describe("JUnitXmlReporter", function(){
+
+        beforeEach(function(){
+            env = new jasmine.Env();
+            env.updateInterval = 0;
+            runner = new jasmine.Runner(env);
+
+            suite = fakeSuite("ParentSuite");
+            spec = fakeSpec(suite, "should be a dummy with invalid characters: & < > \" '");
+            reporter = new jasmine.JUnitXmlReporter();
+        });
+
+        describe("constructor", function(){
+            it("should default path to an empty string", function(){
+                expect(reporter.savePath).toEqual("");
+            });
+            it("should default consolidate to true", function(){
+                expect(reporter.consolidate).toBe(true);
+            });
+            it("should default useDotNotation to true", function(){
+                expect(reporter.useDotNotation).toBe(true);
+            });
+        });
+
+        describe("reportSpecStarting", function(){
+            it("should add start time", function(){
+                reporter.reportSpecStarting(spec);
+                expect(spec.startTime).not.toBeUndefined();
+            });
+            it("shound add start time to the suite", function(){
+                expect(suite.startTime).toBeUndefined();
+                reporter.reportSpecStarting(spec);
+                expect(suite.startTime).not.toBeUndefined();
+            });
+            it("should not add start time to the suite if it already exists", function(){
+                var a = new Date();
+                suite.startTime = a;
+                reporter.reportSpecStarting(spec);
+                expect(suite.startTime).toBe(a);
+            });
+        });
+
+        describe("reportSpecResults", function(){
+            beforeEach(function(){
+                reporter.reportSpecStarting(spec);
+                //spec.results_ = fakeResults();
+                reporter.reportSpecResults(spec);
+            });
+            it("should compute duration", function(){
+                expect(spec.duration).not.toBeUndefined();
+            });
+            it("should generate <testcase> output", function(){
+                expect(spec.output).not.toBeUndefined();
+                expect(spec.output).toContain("<testcase");
+            });
+            it("should escape bad xml characters in spec description", function() {
+                expect(spec.output).toContain("&amp; &lt; &gt; &quot; &apos;");
+            });
+            it("should generate valid xml <failure> output if test failed", function(){
+                // this one takes a bit of setup to pretend a failure
+                spec = fakeSpec(suite, "should be a dummy");
+                reporter.reportSpecStarting(spec);
+                var expectationResult = new jasmine.ExpectationResult({
+                    matcherName: "toEqual", passed: false, message: "Expected 'a' to equal '&'."
+                });
+                var results = {
+                    passed: function() { return false; },
+                    getItems: function() { return [expectationResult]; }
+                };
+                spyOn(spec, "results").andReturn(results);
+                reporter.reportSpecResults(spec);
+                expect(spec.output).toContain("<failure>");
+                expect(spec.output).toContain("to equal &apos;&amp;");
+            });
+        });
+
+        describe("reportSuiteResults", function(){
+            beforeEach(function(){
+                triggerSuiteEvents([suite]);
+            });
+            it("should compute duration", function(){
+                expect(suite.duration).not.toBeUndefined();
+            });
+            it("should generate startTime if no specs were executed", function(){
+                suite = fakeSuite("just a fake suite");
+                triggerSuiteEvents([suite]);
+                expect(suite.startTime).not.toBeUndefined();
+            });
+            it("should generate <testsuite> output", function(){
+                expect(suite.output).not.toBeUndefined();
+                expect(suite.output).toContain("<testsuite");
+            });
+            it("should contain <testcase> output from specs", function(){
+                expect(suite.output).toContain("<testcase");
+            });
+        });
+
+        describe("reportRunnerResults", function(){
+            var subSuite, subSubSuite, siblingSuite;
+
+            beforeEach(function(){
+                subSuite = fakeSuite("SubSuite", suite);
+                subSubSuite = fakeSuite("SubSubSuite", subSuite);
+                siblingSuite = fakeSuite("SiblingSuite With Invalid Chars & < > \" ' | : \\ /");
+                var subSpec = fakeSpec(subSuite, "should be one level down");
+                var subSubSpec = fakeSpec(subSubSuite, "should be two levels down");
+                var siblingSpec = fakeSpec(siblingSuite, "should be a sibling of Parent");
+
+                spyOn(reporter, "writeFile");
+                spyOn(reporter, "getNestedOutput").andCallThrough();
+                triggerSuiteEvents([suite, subSuite, subSubSuite, siblingSuite]);
+            });
+
+            describe("general functionality", function() {
+                beforeEach(function() {
+                    reporter.reportRunnerResults(runner);
+                });
+                it("should remove invalid filename chars from the filename", function() {
+                    expect(reporter.writeFile).toHaveBeenCalledWith("TEST-SiblingSuiteWithInvalidChars.xml", jasmine.any(String));
+                });
+                it("should remove invalid xml chars from the classname", function() {
+                    expect(siblingSuite.output).toContain("SiblingSuite With Invalid Chars &amp; &lt; &gt; &quot; &apos; | : \\ /");
+                });
+            });
+
+            describe("consolidated is true", function(){
+                beforeEach(function(){
+                    reporter.reportRunnerResults(runner);
+                });
+                it("should write one file per parent suite", function(){
+                    expect(reporter.writeFile.callCount).toEqual(2);
+                });
+                it("should consolidate suite output", function(){
+                    expect(reporter.getNestedOutput.callCount).toEqual(4);
+                });
+                it("should wrap output in <testsuites>", function(){
+                    expect(reporter.writeFile.mostRecentCall.args[1]).toContain("<testsuites>");
+                });
+                it("should include xml header in every file", function(){
+                    for (var i = 0; i < reporter.writeFile.callCount; i++) {
+                        expect(reporter.writeFile.argsForCall[i][1]).toContain("<?xml");
+                    }
+                });
+            });
+
+            describe("consolidated is false", function(){
+                beforeEach(function(){
+                    reporter.consolidate = false;
+                    reporter.reportRunnerResults(runner);
+                });
+                it("should write one file per suite", function(){
+                    expect(reporter.writeFile.callCount).toEqual(4);
+                });
+                it("should not wrap results in <testsuites>", function(){
+                    expect(reporter.writeFile.mostRecentCall.args[1]).not.toContain("<testsuites>");
+                });
+                it("should include xml header in every file", function(){
+                    for (var i = 0; i < reporter.writeFile.callCount; i++) {
+                        expect(reporter.writeFile.argsForCall[i][1]).toContain("<?xml");
+                    }
+                });
+            });
+
+            describe("dot notation is true", function(){
+                beforeEach(function(){
+                    reporter.reportRunnerResults(runner);
+                });
+                it("should separate descriptions with dot notation", function(){
+                    expect(subSubSuite.output).toContain('classname="ParentSuite.SubSuite.SubSubSuite"');
+                });
+            });
+
+            describe("dot notation is false", function(){
+                beforeEach(function(){
+                    reporter.useDotNotation = false;
+                    triggerSuiteEvents([suite, subSuite, subSubSuite, siblingSuite]);
+                    reporter.reportRunnerResults(runner);
+                });
+                it("should separate descriptions with whitespace", function(){
+                    expect(subSubSuite.output).toContain('classname="ParentSuite SubSuite SubSubSuite"');
+                });
+            });
+        });
+    });
+})();
+

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/console_reporter.html
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/console_reporter.html b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/console_reporter.html
new file mode 100644
index 0000000..b0da97f
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/console_reporter.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8" />
+    <title>Console Reporter Spec</title>
+    
+    <link rel="stylesheet" href="../ext/jasmine.css" type="text/css" />
+    
+    <script type="text/javascript" src="../ext/jasmine.js"></script>
+    <script type="text/javascript" src="../ext/jasmine-html.js"></script>
+    <script type="text/javascript" src="../src/jasmine.console_reporter.js"></script>
+</head>
+<body>
+    <script type="text/javascript">
+        describe("Basic Suite", function() {
+            it("Should pass a basic truthiness test.", function() {
+                expect(true).toEqual(true);
+            });
+            
+            it("Should fail when it hits an inequal statement.", function() {
+                expect(1+1).toEqual(3);
+            });
+        });
+        
+        describe("Another Suite", function() {
+            it("Should pass this test as well.", function() {
+                expect(0).toEqual(0);
+            });
+        });
+        
+        jasmine.getEnv().addReporter(new jasmine.ConsoleReporter());
+        jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
+        jasmine.getEnv().execute();
+    </script>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/envjs.bootstrap.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/envjs.bootstrap.js b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/envjs.bootstrap.js
new file mode 100644
index 0000000..4415594
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/envjs.bootstrap.js
@@ -0,0 +1,14 @@
+load('../ext/env.rhino.1.2.js');
+
+Envjs.scriptTypes['text/javascript'] = true;
+
+var specFile;
+
+for (i = 0; i < arguments.length; i++) {
+    specFile = arguments[i];
+    
+    console.log("Loading: " + specFile);
+    
+    window.location = specFile
+}
+

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/envjs.runner.sh
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/envjs.runner.sh b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/envjs.runner.sh
new file mode 100755
index 0000000..6bc583b
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/envjs.runner.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+# cleanup previous test runs
+rm -f *.xml
+
+# fire up the envjs environment
+java -cp ../ext/js.jar:../ext/jline.jar org.mozilla.javascript.tools.shell.Main -opt -1 envjs.bootstrap.js $@

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/junit_xml_reporter.html
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/junit_xml_reporter.html b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/junit_xml_reporter.html
new file mode 100644
index 0000000..25c1ac2
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/junit_xml_reporter.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8" />
+    <title>JUnit XML Reporter Spec</title>
+
+    <link rel="stylesheet" href="../ext/jasmine.css" type="text/css" />
+
+    <script type="text/javascript" src="../ext/jasmine.js"></script>
+    <script type="text/javascript" src="../ext/jasmine-html.js"></script>
+    <script type="text/javascript" src="../src/jasmine.junit_reporter.js"></script>
+
+    <!-- Include spec file -->
+    <script type="text/javascript" src="JUnitXmlReporterSpec.js"></script>
+</head>
+<body>
+    <script type="text/javascript">
+        jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
+        jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter());
+        jasmine.getEnv().execute();
+    </script>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/phantomjs-testrunner.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/phantomjs-testrunner.js b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/phantomjs-testrunner.js
new file mode 100644
index 0000000..edcca35
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/phantomjs-testrunner.js
@@ -0,0 +1,183 @@
+// Verify arguments
+if (phantom.args.length === 0) {
+    console.log("Simple JasmineBDD test runner for phantom.js");
+    console.log("Usage: phantomjs-testrunner.js url_to_runner.html");
+    console.log("Accepts http:// and file:// urls");
+    console.log("");
+    console.log("NOTE: This script depends on jasmine.TrivialReporter being used\non the page, for the DOM elements it creates.\n");
+    phantom.exit(2);
+}
+else {
+    var args = phantom.args;
+    var pages = [], page, address, resultsKey, i, l;
+
+    var setupPageFn = function(p, k) {
+        return function() {
+            overloadPageEvaluate(p);
+            setupWriteFileFunction(p, k);
+        };
+    };
+
+    for (i = 0, l = args.length; i < l; i++) {
+        address = args[i];
+        console.log("Loading " + address);
+
+        // if provided a url without a protocol, try to use file://
+        address = address.indexOf("://") === -1 ? "file://" + address : address;
+
+        // create a WebPage object to work with
+        page = require("webpage").create();
+        page.url = address;
+
+        // When initialized, inject the reporting functions before the page is loaded
+        // (and thus before it will try to utilize the functions)
+        resultsKey = "__jr" + Math.ceil(Math.random() * 1000000);
+        page.onInitialized = setupPageFn(page, resultsKey);
+        page.open(address, processPage(null, page, resultsKey));
+        pages.push(page);
+    }
+
+    // bail when all pages have been processed
+    setInterval(function(){
+        var exit_code = 0;
+        for (i = 0, l = pages.length; i < l; i++) {
+            page = pages[i];
+            if (page.__exit_code === null) {
+                // wait until later
+                return;
+            }
+            exit_code |= page.__exit_code;
+        }
+        phantom.exit(exit_code);
+    }, 100);
+}
+
+// Thanks to hoisting, these helpers are still available when needed above
+/**
+ * Stringifies the function, replacing any %placeholders% with mapped values.
+ *
+ * @param {function} fn The function to replace occurrences within.
+ * @param {object} replacements Key => Value object of string replacements.
+ */
+function replaceFunctionPlaceholders(fn, replacements) {
+    if (replacements && typeof replacements === "object") {
+        fn = fn.toString();
+        for (var p in replacements) {
+            if (replacements.hasOwnProperty(p)) {
+                var match = new RegExp("%" + p + "%", "g");
+                do {
+                    fn = fn.replace(match, replacements[p]);
+                } while(fn.indexOf(match) !== -1);
+            }
+        }
+    }
+    return fn;
+}
+
+/**
+ * Replaces the "evaluate" method with one we can easily do substitution with.
+ *
+ * @param {phantomjs.WebPage} page The WebPage object to overload
+ */
+function overloadPageEvaluate(page) {
+    page._evaluate = page.evaluate;
+    page.evaluate = function(fn, replacements) { return page._evaluate(replaceFunctionPlaceholders(fn, replacements)); };
+    return page;
+}
+
+/** Stubs a fake writeFile function into the test runner.
+ *
+ * @param {phantomjs.WebPage} page The WebPage object to inject functions into.
+ * @param {string} key The name of the global object in which file data should
+ *                     be stored for later retrieval.
+ */
+// TODO: not bothering with error checking for now (closed environment)
+function setupWriteFileFunction(page, key) {
+    page.evaluate(function(){
+        window["%resultsObj%"] = {};
+        window.__phantom_writeFile = function(filename, text) {
+            window["%resultsObj%"][filename] = text;
+        };
+    }, {resultsObj: key});
+}
+
+/**
+ * Returns the loaded page's filename => output object.
+ *
+ * @param {phantomjs.WebPage} page The WebPage object to retrieve data from.
+ * @param {string} key The name of the global object to be returned. Should
+ *                     be the same key provided to setupWriteFileFunction.
+ */
+function getXmlResults(page, key) {
+    return page.evaluate(function(){
+        return window["%resultsObj%"] || {};
+    }, {resultsObj: key});
+}
+
+/**
+ * Processes a page.
+ *
+ * @param {string} status The status from opening the page via WebPage#open.
+ * @param {phantomjs.WebPage} page The WebPage to be processed.
+ */
+function processPage(status, page, resultsKey) {
+    if (status === null && page) {
+        page.__exit_code = null;
+        return function(stat){
+            processPage(stat, page, resultsKey);
+        };
+    }
+    if (status !== "success") {
+        console.error("Unable to load resource: " + address);
+        page.__exit_code = 2;
+    }
+    else {
+        var isFinished = function() {
+            return page.evaluate(function(){
+                // if there's a JUnitXmlReporter, return a boolean indicating if it is finished
+                if (jasmine.JUnitXmlReporter) {
+                    return jasmine.JUnitXmlReporter.finished_at !== null;
+                }
+                // otherwise, see if there is anything in a "finished-at" element
+                return document.getElementsByClassName("finished-at").length &&
+                       document.getElementsByClassName("finished-at")[0].innerHTML.length > 0;
+            });
+        };
+        var getResults = function() {
+            return page.evaluate(function(){
+                return document.getElementsByClassName("description").length &&
+                       document.getElementsByClassName("description")[0].innerHTML.match(/(\d+) spec.* (\d+) failure.*/) ||
+                       ["Unable to determine success or failure."];
+            });
+        };
+        var ival = setInterval(function(){
+            if (isFinished()) {
+                // get the results that need to be written to disk
+                var fs = require("fs"),
+                    xml_results = getXmlResults(page, resultsKey),
+                    output;
+                for (var filename in xml_results) {
+                    if (xml_results.hasOwnProperty(filename) && (output = xml_results[filename]) && typeof(output) === "string") {
+                        fs.write(filename, output, "w");
+                    }
+                }
+
+                // print out a success / failure message of the results
+                var results = getResults();
+                var specs = Number(results[1]);
+                var failures = Number(results[2]);
+                console.log("Results for url " + page.url + ":");
+                if (failures > 0) {
+                    console.error("  FAILURE: " + results[0]);
+                    page.__exit_code = 1;
+                    clearInterval(ival);
+                }
+                else {
+                    console.log("  SUCCESS: " + results[0]);
+                    page.__exit_code = 0;
+                    clearInterval(ival);
+                }
+            }
+        }, 100);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/phantomjs.runner.sh
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/phantomjs.runner.sh b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/phantomjs.runner.sh
new file mode 100755
index 0000000..ca5d8fa
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/phantomjs.runner.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# sanity check to make sure phantomjs exists in the PATH
+hash /usr/bin/env phantomjs &> /dev/null
+if [ $? -eq 1 ]; then
+    echo "ERROR: phantomjs is not installed"
+    echo "Please visit http://www.phantomjs.org/"
+    exit 1
+fi
+
+# sanity check number of args
+if [ $# -lt 1 ]
+then
+    echo "Usage: `basename $0` path_to_runner.html"
+    echo
+    exit 1
+fi
+
+SCRIPTDIR=$(dirname `perl -e 'use Cwd "abs_path";print abs_path(shift)' $0`)
+TESTFILE=""
+while (( "$#" )); do
+    TESTFILE="$TESTFILE `perl -e 'use Cwd "abs_path";print abs_path(shift)' $1`"
+    shift
+done
+
+# cleanup previous test runs
+cd $SCRIPTDIR
+rm -f *.xml
+
+# make sure phantomjs submodule is initialized
+cd ..
+git submodule update --init
+
+# fire up the phantomjs environment and run the test
+cd $SCRIPTDIR
+/usr/bin/env phantomjs $SCRIPTDIR/phantomjs-testrunner.js $TESTFILE

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/teamcity_reporter.html
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/teamcity_reporter.html b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/teamcity_reporter.html
new file mode 100644
index 0000000..4803e1e
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/jasmine-reporters/test/teamcity_reporter.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8" />
+    <title>Console Reporter Spec</title>
+
+    <link rel="stylesheet" href="../ext/jasmine.css" type="text/css" />
+
+    <script type="text/javascript" src="../ext/jasmine.js"></script>
+    <script type="text/javascript" src="../ext/jasmine-html.js"></script>
+    <script type="text/javascript" src="../src/jasmine.teamcity_reporter.js"></script>
+</head>
+<body>
+    <script type="text/javascript">
+        describe("Basic Suite", function() {
+            it("Should pass a basic truthiness test.", function() {
+                expect(true).toEqual(true);
+            });
+
+            it("Should fail when it hits an inequal statement.", function() {
+                expect(1+1).toEqual(3);
+            });
+        });
+
+        describe("Another Suite", function() {
+            it("Should pass this test as well.", function() {
+                expect(0).toEqual(0);
+            });
+        });
+
+        jasmine.getEnv().addReporter(new jasmine.TeamcityReporter());
+        jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
+        jasmine.getEnv().execute();
+    </script>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/.npmignore
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/.npmignore b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/.npmignore
new file mode 100644
index 0000000..9303c34
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/.npmignore
@@ -0,0 +1,2 @@
+node_modules/
+npm-debug.log
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/.travis.yml
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/.travis.yml b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/.travis.yml
new file mode 100644
index 0000000..84fd7ca
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+  - 0.6
+  - 0.8
+  - 0.9

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/LICENSE
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/LICENSE b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/LICENSE
new file mode 100644
index 0000000..432d1ae
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/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-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/examples/pow.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/examples/pow.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/examples/pow.js
new file mode 100644
index 0000000..e692421
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/examples/pow.js
@@ -0,0 +1,6 @@
+var mkdirp = require('mkdirp');
+
+mkdirp('/tmp/foo/bar/baz', function (err) {
+    if (err) console.error(err)
+    else console.log('pow!')
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/index.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/index.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/index.js
new file mode 100644
index 0000000..fda6de8
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/index.js
@@ -0,0 +1,82 @@
+var path = require('path');
+var fs = require('fs');
+
+module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;
+
+function mkdirP (p, mode, f, made) {
+    if (typeof mode === 'function' || mode === undefined) {
+        f = mode;
+        mode = 0777 & (~process.umask());
+    }
+    if (!made) made = null;
+
+    var cb = f || function () {};
+    if (typeof mode === 'string') mode = parseInt(mode, 8);
+    p = path.resolve(p);
+
+    fs.mkdir(p, mode, function (er) {
+        if (!er) {
+            made = made || p;
+            return cb(null, made);
+        }
+        switch (er.code) {
+            case 'ENOENT':
+                mkdirP(path.dirname(p), mode, function (er, made) {
+                    if (er) cb(er, made);
+                    else mkdirP(p, mode, cb, made);
+                });
+                break;
+
+            // In the case of any other error, just see if there's a dir
+            // there already.  If so, then hooray!  If not, then something
+            // is borked.
+            default:
+                fs.stat(p, function (er2, stat) {
+                    // if the stat fails, then that's super weird.
+                    // let the original error be the failure reason.
+                    if (er2 || !stat.isDirectory()) cb(er, made)
+                    else cb(null, made);
+                });
+                break;
+        }
+    });
+}
+
+mkdirP.sync = function sync (p, mode, made) {
+    if (mode === undefined) {
+        mode = 0777 & (~process.umask());
+    }
+    if (!made) made = null;
+
+    if (typeof mode === 'string') mode = parseInt(mode, 8);
+    p = path.resolve(p);
+
+    try {
+        fs.mkdirSync(p, mode);
+        made = made || p;
+    }
+    catch (err0) {
+        switch (err0.code) {
+            case 'ENOENT' :
+                made = sync(path.dirname(p), mode, made);
+                sync(p, mode, made);
+                break;
+
+            // In the case of any other error, just see if there's a dir
+            // there already.  If so, then hooray!  If not, then something
+            // is borked.
+            default:
+                var stat;
+                try {
+                    stat = fs.statSync(p);
+                }
+                catch (err1) {
+                    throw err0;
+                }
+                if (!stat.isDirectory()) throw err0;
+                break;
+        }
+    }
+
+    return made;
+};

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/package.json
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/package.json b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/package.json
new file mode 100644
index 0000000..169f15a
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/package.json
@@ -0,0 +1,33 @@
+{
+  "name": "mkdirp",
+  "description": "Recursively mkdir, like `mkdir -p`",
+  "version": "0.3.5",
+  "author": {
+    "name": "James Halliday",
+    "email": "mail@substack.net",
+    "url": "http://substack.net"
+  },
+  "main": "./index",
+  "keywords": [
+    "mkdir",
+    "directory"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "http://github.com/substack/node-mkdirp.git"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "devDependencies": {
+    "tap": "~0.4.0"
+  },
+  "license": "MIT",
+  "readme": "# mkdirp\n\nLike `mkdir -p`, but in node.js!\n\n[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp)\n\n# example\n\n## pow.js\n\n```js\nvar mkdirp = require('mkdirp');\n    \nmkdirp('/tmp/foo/bar/baz', function (err) {\n    if (err) console.error(err)\n    else console.log('pow!')\n});\n```\n\nOutput\n\n```\npow!\n```\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\n# methods\n\n```js\nvar mkdirp = require('mkdirp');\n```\n\n## mkdirp(dir, mode, cb)\n\nCreate a new directory and any necessary subdirectories at `dir` with octal\npermission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\n`cb(err, made)` fires with the error or the first directory `made`\nthat had to be created, if any.\n\n## mkdirp.sync(dir, mode)\n\nSynchronously create a new directory and any necessary subdirectories at `dir`\nwith octal permission string `mode`.\n\nIf `mode` isn't specified, it def
 aults to `0777 & (~process.umask())`.\n\nReturns the first directory that had to be created, if any.\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install mkdirp\n```\n\n# license\n\nMIT\n",
+  "readmeFilename": "readme.markdown",
+  "bugs": {
+    "url": "https://github.com/substack/node-mkdirp/issues"
+  },
+  "_id": "mkdirp@0.3.5",
+  "_from": "mkdirp@~0.3.5"
+}

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/readme.markdown
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/readme.markdown b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/readme.markdown
new file mode 100644
index 0000000..83b0216
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/readme.markdown
@@ -0,0 +1,63 @@
+# mkdirp
+
+Like `mkdir -p`, but in node.js!
+
+[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp)
+
+# example
+
+## pow.js
+
+```js
+var mkdirp = require('mkdirp');
+    
+mkdirp('/tmp/foo/bar/baz', function (err) {
+    if (err) console.error(err)
+    else console.log('pow!')
+});
+```
+
+Output
+
+```
+pow!
+```
+
+And now /tmp/foo/bar/baz exists, huzzah!
+
+# methods
+
+```js
+var mkdirp = require('mkdirp');
+```
+
+## mkdirp(dir, mode, cb)
+
+Create a new directory and any necessary subdirectories at `dir` with octal
+permission string `mode`.
+
+If `mode` isn't specified, it defaults to `0777 & (~process.umask())`.
+
+`cb(err, made)` fires with the error or the first directory `made`
+that had to be created, if any.
+
+## mkdirp.sync(dir, mode)
+
+Synchronously create a new directory and any necessary subdirectories at `dir`
+with octal permission string `mode`.
+
+If `mode` isn't specified, it defaults to `0777 & (~process.umask())`.
+
+Returns the first directory that had to be created, if any.
+
+# install
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install mkdirp
+```
+
+# license
+
+MIT

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/chmod.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/chmod.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/chmod.js
new file mode 100644
index 0000000..520dcb8
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/chmod.js
@@ -0,0 +1,38 @@
+var mkdirp = require('../').mkdirp;
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+var ps = [ '', 'tmp' ];
+
+for (var i = 0; i < 25; i++) {
+    var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    ps.push(dir);
+}
+
+var file = ps.join('/');
+
+test('chmod-pre', function (t) {
+    var mode = 0744
+    mkdirp(file, mode, function (er) {
+        t.ifError(er, 'should not error');
+        fs.stat(file, function (er, stat) {
+            t.ifError(er, 'should exist');
+            t.ok(stat && stat.isDirectory(), 'should be directory');
+            t.equal(stat && stat.mode & 0777, mode, 'should be 0744');
+            t.end();
+        });
+    });
+});
+
+test('chmod', function (t) {
+    var mode = 0755
+    mkdirp(file, mode, function (er) {
+        t.ifError(er, 'should not error');
+        fs.stat(file, function (er, stat) {
+            t.ifError(er, 'should exist');
+            t.ok(stat && stat.isDirectory(), 'should be directory');
+            t.end();
+        });
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/clobber.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/clobber.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/clobber.js
new file mode 100644
index 0000000..0eb7099
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/clobber.js
@@ -0,0 +1,37 @@
+var mkdirp = require('../').mkdirp;
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+var ps = [ '', 'tmp' ];
+
+for (var i = 0; i < 25; i++) {
+    var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    ps.push(dir);
+}
+
+var file = ps.join('/');
+
+// a file in the way
+var itw = ps.slice(0, 3).join('/');
+
+
+test('clobber-pre', function (t) {
+    console.error("about to write to "+itw)
+    fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.');
+
+    fs.stat(itw, function (er, stat) {
+        t.ifError(er)
+        t.ok(stat && stat.isFile(), 'should be file')
+        t.end()
+    })
+})
+
+test('clobber', function (t) {
+    t.plan(2);
+    mkdirp(file, 0755, function (err) {
+        t.ok(err);
+        t.equal(err.code, 'ENOTDIR');
+        t.end();
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/mkdirp.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/mkdirp.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/mkdirp.js
new file mode 100644
index 0000000..b07cd70
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/mkdirp.js
@@ -0,0 +1,28 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('woo', function (t) {
+    t.plan(2);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    
+    var file = '/tmp/' + [x,y,z].join('/');
+    
+    mkdirp(file, 0755, function (err) {
+        if (err) t.fail(err);
+        else path.exists(file, function (ex) {
+            if (!ex) t.fail('file not created')
+            else fs.stat(file, function (err, stat) {
+                if (err) t.fail(err)
+                else {
+                    t.equal(stat.mode & 0777, 0755);
+                    t.ok(stat.isDirectory(), 'target not a directory');
+                    t.end();
+                }
+            })
+        })
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/perm.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/perm.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/perm.js
new file mode 100644
index 0000000..23a7abb
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/perm.js
@@ -0,0 +1,32 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('async perm', function (t) {
+    t.plan(2);
+    var file = '/tmp/' + (Math.random() * (1<<30)).toString(16);
+    
+    mkdirp(file, 0755, function (err) {
+        if (err) t.fail(err);
+        else path.exists(file, function (ex) {
+            if (!ex) t.fail('file not created')
+            else fs.stat(file, function (err, stat) {
+                if (err) t.fail(err)
+                else {
+                    t.equal(stat.mode & 0777, 0755);
+                    t.ok(stat.isDirectory(), 'target not a directory');
+                    t.end();
+                }
+            })
+        })
+    });
+});
+
+test('async root perm', function (t) {
+    mkdirp('/tmp', 0755, function (err) {
+        if (err) t.fail(err);
+        t.end();
+    });
+    t.end();
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/perm_sync.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/perm_sync.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/perm_sync.js
new file mode 100644
index 0000000..f685f60
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/perm_sync.js
@@ -0,0 +1,39 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('sync perm', function (t) {
+    t.plan(2);
+    var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json';
+    
+    mkdirp.sync(file, 0755);
+    path.exists(file, function (ex) {
+        if (!ex) t.fail('file not created')
+        else fs.stat(file, function (err, stat) {
+            if (err) t.fail(err)
+            else {
+                t.equal(stat.mode & 0777, 0755);
+                t.ok(stat.isDirectory(), 'target not a directory');
+                t.end();
+            }
+        })
+    });
+});
+
+test('sync root perm', function (t) {
+    t.plan(1);
+    
+    var file = '/tmp';
+    mkdirp.sync(file, 0755);
+    path.exists(file, function (ex) {
+        if (!ex) t.fail('file not created')
+        else fs.stat(file, function (err, stat) {
+            if (err) t.fail(err)
+            else {
+                t.ok(stat.isDirectory(), 'target not a directory');
+                t.end();
+            }
+        })
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/race.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/race.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/race.js
new file mode 100644
index 0000000..96a0447
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/race.js
@@ -0,0 +1,41 @@
+var mkdirp = require('../').mkdirp;
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('race', function (t) {
+    t.plan(4);
+    var ps = [ '', 'tmp' ];
+    
+    for (var i = 0; i < 25; i++) {
+        var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+        ps.push(dir);
+    }
+    var file = ps.join('/');
+    
+    var res = 2;
+    mk(file, function () {
+        if (--res === 0) t.end();
+    });
+    
+    mk(file, function () {
+        if (--res === 0) t.end();
+    });
+    
+    function mk (file, cb) {
+        mkdirp(file, 0755, function (err) {
+            if (err) t.fail(err);
+            else path.exists(file, function (ex) {
+                if (!ex) t.fail('file not created')
+                else fs.stat(file, function (err, stat) {
+                    if (err) t.fail(err)
+                    else {
+                        t.equal(stat.mode & 0777, 0755);
+                        t.ok(stat.isDirectory(), 'target not a directory');
+                        if (cb) cb();
+                    }
+                })
+            })
+        });
+    }
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/rel.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/rel.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/rel.js
new file mode 100644
index 0000000..7985824
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/rel.js
@@ -0,0 +1,32 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('rel', function (t) {
+    t.plan(2);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    
+    var cwd = process.cwd();
+    process.chdir('/tmp');
+    
+    var file = [x,y,z].join('/');
+    
+    mkdirp(file, 0755, function (err) {
+        if (err) t.fail(err);
+        else path.exists(file, function (ex) {
+            if (!ex) t.fail('file not created')
+            else fs.stat(file, function (err, stat) {
+                if (err) t.fail(err)
+                else {
+                    process.chdir(cwd);
+                    t.equal(stat.mode & 0777, 0755);
+                    t.ok(stat.isDirectory(), 'target not a directory');
+                    t.end();
+                }
+            })
+        })
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/return.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/return.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/return.js
new file mode 100644
index 0000000..bce68e5
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/return.js
@@ -0,0 +1,25 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('return value', function (t) {
+    t.plan(4);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+    var file = '/tmp/' + [x,y,z].join('/');
+
+    // should return the first dir created.
+    // By this point, it would be profoundly surprising if /tmp didn't
+    // already exist, since every other test makes things in there.
+    mkdirp(file, function (err, made) {
+        t.ifError(err);
+        t.equal(made, '/tmp/' + x);
+        mkdirp(file, function (err, made) {
+          t.ifError(err);
+          t.equal(made, null);
+        });
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/return_sync.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/return_sync.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/return_sync.js
new file mode 100644
index 0000000..7c222d3
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/return_sync.js
@@ -0,0 +1,24 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('return value', function (t) {
+    t.plan(2);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+    var file = '/tmp/' + [x,y,z].join('/');
+
+    // should return the first dir created.
+    // By this point, it would be profoundly surprising if /tmp didn't
+    // already exist, since every other test makes things in there.
+    // Note that this will throw on failure, which will fail the test.
+    var made = mkdirp.sync(file);
+    t.equal(made, '/tmp/' + x);
+
+    // making the same file again should have no effect.
+    made = mkdirp.sync(file);
+    t.equal(made, null);
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/root.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/root.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/root.js
new file mode 100644
index 0000000..97ad7a2
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/root.js
@@ -0,0 +1,18 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('root', function (t) {
+    // '/' on unix, 'c:/' on windows.
+    var file = path.resolve('/');
+
+    mkdirp(file, 0755, function (err) {
+        if (err) throw err
+        fs.stat(file, function (er, stat) {
+            if (er) throw er
+            t.ok(stat.isDirectory(), 'target is a directory');
+            t.end();
+        })
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/sync.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/sync.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/sync.js
new file mode 100644
index 0000000..7530cad
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/sync.js
@@ -0,0 +1,32 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('sync', function (t) {
+    t.plan(2);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+    var file = '/tmp/' + [x,y,z].join('/');
+
+    try {
+        mkdirp.sync(file, 0755);
+    } catch (err) {
+        t.fail(err);
+        return t.end();
+    }
+
+    path.exists(file, function (ex) {
+        if (!ex) t.fail('file not created')
+        else fs.stat(file, function (err, stat) {
+            if (err) t.fail(err)
+            else {
+                t.equal(stat.mode & 0777, 0755);
+                t.ok(stat.isDirectory(), 'target not a directory');
+                t.end();
+            }
+        });
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/umask.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/umask.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/umask.js
new file mode 100644
index 0000000..64ccafe
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/umask.js
@@ -0,0 +1,28 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('implicit mode from umask', function (t) {
+    t.plan(2);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    
+    var file = '/tmp/' + [x,y,z].join('/');
+    
+    mkdirp(file, function (err) {
+        if (err) t.fail(err);
+        else path.exists(file, function (ex) {
+            if (!ex) t.fail('file not created')
+            else fs.stat(file, function (err, stat) {
+                if (err) t.fail(err)
+                else {
+                    t.equal(stat.mode & 0777, 0777 & (~process.umask()));
+                    t.ok(stat.isDirectory(), 'target not a directory');
+                    t.end();
+                }
+            })
+        })
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/umask_sync.js
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/umask_sync.js b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/umask_sync.js
new file mode 100644
index 0000000..35bd5cb
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/mkdirp/test/umask_sync.js
@@ -0,0 +1,32 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('umask sync modes', function (t) {
+    t.plan(2);
+    var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+    var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+    var file = '/tmp/' + [x,y,z].join('/');
+
+    try {
+        mkdirp.sync(file);
+    } catch (err) {
+        t.fail(err);
+        return t.end();
+    }
+
+    path.exists(file, function (ex) {
+        if (!ex) t.fail('file not created')
+        else fs.stat(file, function (err, stat) {
+            if (err) t.fail(err)
+            else {
+                t.equal(stat.mode & 0777, (0777 & (~process.umask())));
+                t.ok(stat.isDirectory(), 'target not a directory');
+                t.end();
+            }
+        });
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1139813c/blackberry10/node_modules/jasmine-node/node_modules/requirejs/README.md
----------------------------------------------------------------------
diff --git a/blackberry10/node_modules/jasmine-node/node_modules/requirejs/README.md b/blackberry10/node_modules/jasmine-node/node_modules/requirejs/README.md
new file mode 100644
index 0000000..545b31d
--- /dev/null
+++ b/blackberry10/node_modules/jasmine-node/node_modules/requirejs/README.md
@@ -0,0 +1,9 @@
+# requirejs
+
+RequireJS for use in Node. includes:
+
+* r.js: the RequireJS optimizer, and AMD runtime for use in Node.
+* require.js: The browser-based AMD loader.
+
+More information at http://requirejs.org
+