mirror of https://github.com/vitalif/phantomjs
Added Jasmine 1.1.0, a Console Reporter and the first Test Specs for the new Filesystem API.
parent
853052da93
commit
e5c2240fcb
|
@ -0,0 +1,39 @@
|
||||||
|
describe("Basic Files API (read, write, remove, ...)", function() {
|
||||||
|
var FILENAME = "temp-01.test",
|
||||||
|
ABSENT = "absent-01.test";
|
||||||
|
|
||||||
|
it("should be able to create and write a file", function() {
|
||||||
|
try{
|
||||||
|
var f = fs.open(FILENAME, "w");
|
||||||
|
|
||||||
|
f.write("hello");
|
||||||
|
f.writeLine("");
|
||||||
|
f.writeLine("world");
|
||||||
|
f.close();
|
||||||
|
} catch (e) { }
|
||||||
|
expect(fs.exists(FILENAME)).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to read content from a file", function() {
|
||||||
|
var content = "";
|
||||||
|
try{
|
||||||
|
var f = fs.open(FILENAME, "r");
|
||||||
|
|
||||||
|
content = f.read();
|
||||||
|
f.close();
|
||||||
|
} catch (e) { }
|
||||||
|
expect(content).toEqual("hello\nworld\n");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to remove a file", function() {
|
||||||
|
expect(fs.exists(FILENAME)).toBeTruthy();
|
||||||
|
expect(fs.remove(FILENAME)).toBeTruthy();
|
||||||
|
expect(fs.exists(FILENAME)).toBeFalsy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should throw an exception when trying to open for read a non existing file", function(){
|
||||||
|
expect(function(){
|
||||||
|
fs.open(ABSENT, "r");
|
||||||
|
}).toThrow("Unable to open file '"+ ABSENT +"'");
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright (c) 2008-2011 Pivotal Labs
|
||||||
|
|
||||||
|
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.
|
|
@ -0,0 +1,177 @@
|
||||||
|
jasmine.ConsoleReporter = function(print, doneCallback, showColors) {
|
||||||
|
//inspired by mhevery's jasmine-node reporter
|
||||||
|
//https://github.com/mhevery/jasmine-node
|
||||||
|
|
||||||
|
doneCallback = doneCallback || function() {};
|
||||||
|
|
||||||
|
var ansi = {
|
||||||
|
green: '\033[32m',
|
||||||
|
red: '\033[31m',
|
||||||
|
yellow: '\033[33m',
|
||||||
|
none: '\033[0m'
|
||||||
|
},
|
||||||
|
language = {
|
||||||
|
spec: "spec",
|
||||||
|
failure: "failure"
|
||||||
|
};
|
||||||
|
|
||||||
|
function coloredStr(color, str) {
|
||||||
|
return showColors ? (ansi[color] + str + ansi.none) : str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function greenStr(str) {
|
||||||
|
return coloredStr("green", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
function redStr(str) {
|
||||||
|
return coloredStr("red", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
function yellowStr(str) {
|
||||||
|
return coloredStr("yellow", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
function newline() {
|
||||||
|
print("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function started() {
|
||||||
|
print("Started");
|
||||||
|
newline();
|
||||||
|
}
|
||||||
|
|
||||||
|
function greenDot() {
|
||||||
|
print(greenStr("."));
|
||||||
|
}
|
||||||
|
|
||||||
|
function redF() {
|
||||||
|
print(redStr("F"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function yellowStar() {
|
||||||
|
print(yellowStr("*"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function plural(str, count) {
|
||||||
|
return count == 1 ? str : str + "s";
|
||||||
|
}
|
||||||
|
|
||||||
|
function repeat(thing, times) {
|
||||||
|
var arr = [];
|
||||||
|
for (var i = 0; i < times; i++) {
|
||||||
|
arr.push(thing);
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function indent(str, spaces) {
|
||||||
|
var lines = (str || '').split("\n");
|
||||||
|
var newArr = [];
|
||||||
|
for (var i = 0; i < lines.length; i++) {
|
||||||
|
newArr.push(repeat(" ", spaces).join("") + lines[i]);
|
||||||
|
}
|
||||||
|
return newArr.join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function specFailureDetails(suiteDescription, specDescription, stackTraces) {
|
||||||
|
newline();
|
||||||
|
print(suiteDescription + " " + specDescription);
|
||||||
|
newline();
|
||||||
|
for (var i = 0; i < stackTraces.length; i++) {
|
||||||
|
print(indent(stackTraces[i], 2));
|
||||||
|
newline();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function finished(elapsed) {
|
||||||
|
newline();
|
||||||
|
print("Finished in " + elapsed / 1000 + " seconds");
|
||||||
|
}
|
||||||
|
|
||||||
|
function summary(colorF, specs, failed) {
|
||||||
|
newline();
|
||||||
|
print(colorF(specs + " " + plural(language.spec, specs) + ", " +
|
||||||
|
failed + " " + plural(language.failure, failed)));
|
||||||
|
newline();
|
||||||
|
newline();
|
||||||
|
}
|
||||||
|
|
||||||
|
function greenSummary(specs, failed) {
|
||||||
|
summary(greenStr, specs, failed);
|
||||||
|
}
|
||||||
|
|
||||||
|
function redSummary(specs, failed) {
|
||||||
|
summary(redStr, specs, failed);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fullSuiteDescription(suite) {
|
||||||
|
var fullDescription = suite.description;
|
||||||
|
if (suite.parentSuite) fullDescription = fullSuiteDescription(suite.parentSuite) + " " + fullDescription;
|
||||||
|
return fullDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.now = function() {
|
||||||
|
return new Date().getTime();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.reportRunnerStarting = function() {
|
||||||
|
this.runnerStartTime = this.now();
|
||||||
|
started();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.reportSpecStarting = function() { /* do nothing */
|
||||||
|
};
|
||||||
|
|
||||||
|
this.reportSpecResults = function(spec) {
|
||||||
|
var results = spec.results();
|
||||||
|
if (results.skipped) {
|
||||||
|
yellowStar();
|
||||||
|
} else if (results.passed()) {
|
||||||
|
greenDot();
|
||||||
|
} else {
|
||||||
|
redF();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.suiteResults = [];
|
||||||
|
|
||||||
|
this.reportSuiteResults = function(suite) {
|
||||||
|
var suiteResult = {
|
||||||
|
description: fullSuiteDescription(suite),
|
||||||
|
failedSpecResults: []
|
||||||
|
};
|
||||||
|
|
||||||
|
suite.results().items_.forEach(function(spec) {
|
||||||
|
if (spec.failedCount > 0 && spec.description) suiteResult.failedSpecResults.push(spec);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.suiteResults.push(suiteResult);
|
||||||
|
};
|
||||||
|
|
||||||
|
function eachSpecFailure(suiteResults, callback) {
|
||||||
|
for (var i = 0; i < suiteResults.length; i++) {
|
||||||
|
var suiteResult = suiteResults[i];
|
||||||
|
for (var j = 0; j < suiteResult.failedSpecResults.length; j++) {
|
||||||
|
var failedSpecResult = suiteResult.failedSpecResults[j];
|
||||||
|
var stackTraces = [];
|
||||||
|
for (var k = 0; k < failedSpecResult.items_.length; k++) stackTraces.push(failedSpecResult.items_[k].trace.stack);
|
||||||
|
callback(suiteResult.description, failedSpecResult.description, stackTraces);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.reportRunnerResults = function(runner) {
|
||||||
|
newline();
|
||||||
|
|
||||||
|
eachSpecFailure(this.suiteResults, function(suiteDescription, specDescription, stackTraces) {
|
||||||
|
specFailureDetails(suiteDescription, specDescription, stackTraces);
|
||||||
|
});
|
||||||
|
|
||||||
|
finished(this.now() - this.runnerStartTime);
|
||||||
|
|
||||||
|
var results = runner.results();
|
||||||
|
var summaryFunction = results.failedCount === 0 ? greenSummary : redSummary;
|
||||||
|
summaryFunction(runner.specs().length, results.failedCount);
|
||||||
|
doneCallback(runner);
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,166 @@
|
||||||
|
body {
|
||||||
|
font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.jasmine_reporter a:visited, .jasmine_reporter a {
|
||||||
|
color: #303;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jasmine_reporter a:hover, .jasmine_reporter a:active {
|
||||||
|
color: blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
.run_spec {
|
||||||
|
float:right;
|
||||||
|
padding-right: 5px;
|
||||||
|
font-size: .8em;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jasmine_reporter {
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner {
|
||||||
|
color: #303;
|
||||||
|
background-color: #fef;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
float: left;
|
||||||
|
font-size: 1.1em;
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo .version {
|
||||||
|
font-size: .6em;
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.runner.running {
|
||||||
|
background-color: yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.options {
|
||||||
|
text-align: right;
|
||||||
|
font-size: .8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.suite {
|
||||||
|
border: 1px outset gray;
|
||||||
|
margin: 5px 0;
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.suite .suite {
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.suite.passed {
|
||||||
|
background-color: #dfd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.suite.failed {
|
||||||
|
background-color: #fdd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spec {
|
||||||
|
margin: 5px;
|
||||||
|
padding-left: 1em;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spec.failed, .spec.passed, .spec.skipped {
|
||||||
|
padding-bottom: 5px;
|
||||||
|
border: 1px solid gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spec.failed {
|
||||||
|
background-color: #fbb;
|
||||||
|
border-color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spec.passed {
|
||||||
|
background-color: #bfb;
|
||||||
|
border-color: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spec.skipped {
|
||||||
|
background-color: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.messages {
|
||||||
|
border-left: 1px dashed gray;
|
||||||
|
padding-left: 1em;
|
||||||
|
padding-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.passed {
|
||||||
|
background-color: #cfc;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.failed {
|
||||||
|
background-color: #fbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.skipped {
|
||||||
|
color: #777;
|
||||||
|
background-color: #eee;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*.resultMessage {*/
|
||||||
|
/*white-space: pre;*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
|
.resultMessage span.result {
|
||||||
|
display: block;
|
||||||
|
line-height: 2em;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.resultMessage .mismatch {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stackTrace {
|
||||||
|
white-space: pre;
|
||||||
|
font-size: .8em;
|
||||||
|
margin-left: 10px;
|
||||||
|
max-height: 5em;
|
||||||
|
overflow: auto;
|
||||||
|
border: 1px inset red;
|
||||||
|
padding: 1em;
|
||||||
|
background: #eef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.finished-at {
|
||||||
|
padding-left: 1em;
|
||||||
|
font-size: .6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-passed .passed,
|
||||||
|
.show-skipped .skipped {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#jasmine_content {
|
||||||
|
position:fixed;
|
||||||
|
right: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.runner {
|
||||||
|
border: 1px solid gray;
|
||||||
|
display: block;
|
||||||
|
margin: 5px 0;
|
||||||
|
padding: 2px 0 2px 10px;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,22 @@
|
||||||
|
// Load Jasmine and the HTML reporter
|
||||||
|
phantom.injectJs("./lib/jasmine.js");
|
||||||
|
phantom.injectJs("./lib/jasmine-console.js");
|
||||||
|
|
||||||
|
// Load specs
|
||||||
|
phantom.injectJs("./fs-spec-01.js"); //< Filesystem Specs 01
|
||||||
|
|
||||||
|
// Launch tests
|
||||||
|
var jasmineEnv = jasmine.getEnv();
|
||||||
|
|
||||||
|
// Add a ConsoleReporter to 1) print with colors on the console 2) exit when finished
|
||||||
|
jasmineEnv.addReporter(new jasmine.ConsoleReporter(function(msg){
|
||||||
|
// Print messages straight to the console
|
||||||
|
console.log(msg);
|
||||||
|
}, function(reporter){
|
||||||
|
// On complete
|
||||||
|
phantom.exit();
|
||||||
|
}, true));
|
||||||
|
|
||||||
|
// Launch tests
|
||||||
|
jasmineEnv.updateInterval = 1000;
|
||||||
|
jasmineEnv.execute();
|
Loading…
Reference in New Issue