Skip to content

Commit

Permalink
Add tests for demos
Browse files Browse the repository at this point in the history
We now have automated tests for the demos both before and after they are
moved to the dist directory. This change requires that phantomjs be
installed.

I also moved the old tests from test/ to test/unit to keep the phantomjs
and unit tests separate.

Fixes dagrejs#79
  • Loading branch information
cpettitt committed Sep 14, 2013
1 parent b076bb3 commit 0b44701
Show file tree
Hide file tree
Showing 18 changed files with 110 additions and 47 deletions.
17 changes: 11 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ MODULE=dagre
# There does not appear to be an easy way to define recursive expansion, so
# we do our own expansion a few levels deep.
JS_SRC:=$(wildcard lib/*.js lib/*/*.js lib/*/*/*.js)
JS_TEST:=$(wildcard test/*.js test/*/*.js test/*/*/*.js)
JS_TEST:=$(wildcard test/unit/*.js test/unit/*/*.js test/unit/*/*/*.js)

DEMO_SRC=$(wildcard demo/*)
DEMO_OUT=$(addprefix out/dist/, $(DEMO_SRC))
Expand All @@ -20,20 +20,25 @@ BENCH_FILES?=$(wildcard bench/graphs/*)

OUT_DIRS=out out/dist out/dist/demo

.PHONY: all release dist dist_demo test coverage clean fullclean
.PHONY: all release dist dist-demo test test-demo test-unit coverage clean fullclean

all: dist test coverage

release: all
src/release/release.sh $(MODULE) out/dist

dist: out/dist/$(MODULE).js out/dist/$(MODULE).min.js dist_demo
dist: out/dist/$(MODULE).js out/dist/$(MODULE).min.js dist-demo

dist_demo: out/dist/demo $(DEMO_OUT)
dist-demo: out/dist/demo $(DEMO_OUT)

test: out/dist/$(MODULE).js $(JS_TEST) $(JS_SRC)
test: test-unit test-demo

test-unit: out/dist/$(MODULE).js $(JS_TEST)
$(NODE) $(MOCHA) $(MOCHA_OPTS) $(JS_TEST)

test-demo: test/demo/demo-test.js out/dist/$(MODULE).min.js dist-demo $(wildcard demo/*)
phantomjs $<

coverage: out/coverage.html

bench: bench/bench.js $(MODULE_JS)
Expand All @@ -56,7 +61,7 @@ out/dist/$(MODULE).min.js: out/dist/$(MODULE).js
$(NODE) $(JS_COMPILER) $(JS_COMPILER_OPTS) $< > $@

out/dist/demo/%: demo/%
@sed 's|../dist/dagre.min.js|../dagre.min.js|' < $< > $@
@sed 's|\.\./out/dist/dagre.min.js|../dagre.min.js|' < $< > $@

out/coverage.html: out/dist/$(MODULE).js $(JS_TEST) $(JS_SRC)
$(NODE) $(MOCHA) $(JS_TEST) --require blanket -R html-cov > $@
Expand Down
2 changes: 1 addition & 1 deletion demo/demo-d3.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ <h2>Graph Visualization</h2>
<svg width=600 height=600></svg>

<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="../dist/dagre.min.js"></script>
<script src="../out/dist/dagre.min.js"></script>
<script src="dagre-d3-simple.js"></script>

<style>
Expand Down
2 changes: 1 addition & 1 deletion demo/demo.html
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ <h2>Graph Visualization</h2>
</svg>

<script src="http://d3js.org/d3.v2.min.js"></script>
<script src="../dist/dagre.min.js"></script>
<script src="../out/dist/dagre.min.js"></script>

<script>
// Input related code goes here
Expand Down
2 changes: 1 addition & 1 deletion demo/sentence-tokenization.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<link rel="stylesheet" type="text/css" href="dagre-d3-simple.css">

<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script type="text/javascript" src="../dist/dagre.min.js"></script>
<script type="text/javascript" src="../out/dist/dagre.min.js"></script>
<script src="dagre-d3-simple.js"></script>

<div id="attach">
Expand Down
2 changes: 1 addition & 1 deletion demo/state-graph-dot.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<link rel="stylesheet" type="text/css" href="dagre-d3-simple.css">

<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script type="text/javascript" src="../dist/dagre.min.js"></script>
<script type="text/javascript" src="../out/dist/dagre.min.js"></script>
<script src="dagre-d3-simple.js"></script>

<svg id="svg-canvas" width=800 height=600></svg>
Expand Down
2 changes: 1 addition & 1 deletion demo/state-graph-js.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<link rel="stylesheet" type="text/css" href="dagre-d3-simple.css">

<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script type="text/javascript" src="../dist/dagre.min.js"></script>
<script type="text/javascript" src="../out/dist/dagre.min.js"></script>
<script src="dagre-d3-simple.js"></script>

<svg id="svg-canvas" width=800 height=600></svg>
Expand Down
16 changes: 0 additions & 16 deletions test/common.js

This file was deleted.

75 changes: 75 additions & 0 deletions test/demo/demo-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// A *very* simple test runner to ensure that the demos work as expected.
var webpage = require("webpage"),
system = require("system"),
stdout = system.stdout,
stderr = system.stderr,
// Too bad this replaces the more function fs module from nodejs...
fs = require("fs"),
Set = require("graphlib").data.Set
start = new Date();

var red = "\033[31m";
var green = "\033[32m";
var grey = "\033[30;1m";
var reset = "\033[0m";

function htmlFile(file) { return file.match(/.*\.html/); }

var remaining = Set.unionAll([ls("./demo", htmlFile),
ls("./out/dist/demo", htmlFile)]);
var testCount = remaining.size();
var failures = [];

stdout.write("\n");
stdout.write(" " + grey);

remaining.keys().forEach(function(url) {
var page = webpage.create();
page.onError = function(msg, trace) {
failures.push({ url: url, msg: msg, trace: trace });
testDone(url);
};
page.open(url, function(status) {
if (status !== "success") {
failures.push({ url: url, msg: "Could not load page" });
}
stdout.write(".");
testDone(url);
});
});

function ls(dir, filter) {
var set = new Set();
fs.list(dir).forEach(function(file) {
if (filter(file)) {
set.add(dir + "/" + file);
}
});
return set;
}

function testDone(url) {
remaining.remove(url);
if (remaining.size() === 0) {
stdout.write(reset + "\n");
stdout.write("\n");
failures.forEach(function(failure) {
stderr.write(red + "FAILED: " + failure.url + reset + "\n");
stderr.write(grey);
stderr.write(" " + failure.msg + "\n");
if (failure.trace) {
failure.trace.forEach(function(t) {
stderr.write(" " + t.file + ": " + t.line + (t.function ? " (in function '" + t.function + "')" : "") + "\n");
});
}
stderr.write(reset);
stderr.write("\n");
});
stdout.write(" " + green + (testCount - failures.length) + " passing" + reset);
if (failures.length) {
stdout.write(" " + red + (failures.length) + " failing" + reset);
}
stdout.write(grey + " (" + (new Date() - start) + "ms)" + reset + "\n\n");
phantom.exit(failures.length);
}
}
4 changes: 4 additions & 0 deletions test/unit/assert.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
var chai = require("chai");
chai.Assertion.includeStack = true;

module.exports = chai.assert;
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
var common = require("../common"),
assert = require("chai").assert,
dot = require("../../lib/dot"),
acyclic = require("../../lib/layout/acyclic"),
var assert = require("../assert"),
dot = require("../../../lib/dot"),
acyclic = require("../../../lib/layout/acyclic"),
isAcyclic = require("graphlib").alg.isAcyclic,
findCycles = require("graphlib").alg.findCycles;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
var common = require("../common"),
assert = require("chai").assert,
layout = require("../../lib/layout/layout"),
var assert = require("../assert"),
layout = require("../../../lib/layout/layout"),
Digraph = require("graphlib").Digraph;

describe("layout", function() {
Expand Down
7 changes: 3 additions & 4 deletions test/layout/order-test.js → test/unit/layout/order-test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
var common = require("../common"),
assert = require("chai").assert,
dot = require("../../lib/dot"),
order = require("../../lib/layout/order");
var assert = require("../assert"),
dot = require("../../../lib/dot"),
order = require("../../../lib/layout/order");

describe("order", function() {
it("sets order = 0 for a single node", function() {
Expand Down
7 changes: 3 additions & 4 deletions test/layout/rank-test.js → test/unit/layout/rank-test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
var common = require("../common"),
assert = require("chai").assert,
dot = require("../../lib/dot"),
rank = require("../../lib/layout/rank");
var assert = require("../assert"),
dot = require("../../../lib/dot"),
rank = require("../../../lib/layout/rank");

describe("layout/rank", function() {
it("assigns rank 0 to a node in a singleton graph", function() {
Expand Down
4 changes: 2 additions & 2 deletions test/modules-test.js → test/unit/modules-test.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
var assert = require("chai").assert;
var assert = require("./assert");

// Tests that the various exported modules load without error
describe("modules", function() {
describe("index", function() {
["dot", "layout", "util", "version"].forEach(function(e) {
it("exports " + e, function() {
assert.isDefined(require("../index")[e]);
assert.isDefined(require("../../index")[e]);
});
});
});
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
5 changes: 2 additions & 3 deletions test/util-test.js → test/unit/util-test.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
var common = require("./common"),
assert = require("chai").assert,
util = require("../lib/util");
var assert = require("./assert"),
util = require("../../lib/util");

describe("util.sum", function() {
it("returns the sum of all elements in the array", function() {
Expand Down

0 comments on commit 0b44701

Please sign in to comment.