aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile38
-rw-r--r--test-agent-server.js12
-rw-r--r--test-agent/config.json3
-rw-r--r--test-agent/index.html29
-rw-r--r--test-agent/index.js43
-rw-r--r--test-agent/package.json0
-rw-r--r--test-agent/sandbox.html34
-rw-r--r--test/helper.js85
-rw-r--r--test/webcals/ical_test.js12
-rw-r--r--test/webcals/request/calendar_query_test.js6
-rw-r--r--test/webcals/request/propfind_test.js2
-rw-r--r--test/webcals/sax/base_test.js6
-rw-r--r--test/webcals/sax/dav_response_test.js10
-rw-r--r--test/webcals/sax_test.js6
-rw-r--r--test/webcals/template_test.js2
-rw-r--r--test/webcals/templates/calendar_data_test.js2
-rw-r--r--test/webcals/templates/calendar_filter_test.js4
-rw-r--r--test/webcals/xhr_test.js4
19 files changed, 251 insertions, 48 deletions
diff --git a/.gitignore b/.gitignore
index 03c307c..3c858a4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
node_modules
.DS_Store
data/
+vendor/
diff --git a/Makefile b/Makefile
index 5d798da..29ee741 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,16 @@
-REPORTER := spec
+REPORTER=spec
+WEB_FILE=webcals.js
+VENDOR=./vendor/
+
+.PHONY: package
+package: test-agent-config
+ rm -Rf $(VENDOR)/
+ mkdir $(VENDOR)
+ cp ./node_modules/mocha/mocha.js $(VENDOR)
+ cp ./node_modules/mocha/mocha.css $(VENDOR)
+ cp ./node_modules/chai/chai.js $(VENDOR)
+ cp ./node_modules/test-agent/test-agent.js $(VENDOR)
+ cp ./node_modules/test-agent/test-agent.css $(VENDOR)
.PHONY: test
test:
@@ -11,6 +23,26 @@ test:
test/webcals/request/*_test.js \
test/webcals/*_test.js
+TEST_AGENT_CONFIG=./test-agent/config.json
+.PHONY: test-agent-config
+test-agent-config:
+ @rm -f $(TEST_AGENT_CONFIG)
+ @touch $(TEST_AGENT_CONFIG)
+ @rm -f /tmp/test-agent-config;
+ # Build json array of all test files
+ for d in test; \
+ do \
+ find $$d -name '*_test.js' | sed "s:$$d/::g" >> /tmp/test-agent-config; \
+ done;
+ @echo '{"tests": [' >> $(TEST_AGENT_CONFIG)
+ @cat /tmp/test-agent-config | \
+ sed 's:\(.*\):"\1":' | \
+ sed -e ':a' -e 'N' -e '$$!ba' -e 's/\n/,\
+ /g' >> $(TEST_AGENT_CONFIG);
+ @echo ' ]}' >> $(TEST_AGENT_CONFIG);
+ @echo "Built test ui config file: $(TEST_AGENT_CONFIG)"
+ @rm -f /tmp/test-agent-config
+
.PHONY: watch
FILES=
watch:
@@ -20,3 +52,7 @@ watch:
--watch \
--growl \
test/helper.js $(FILES)
+
+.PHONY: test-server
+test-server:
+ ./node_modules/test-agent/bin/js-test-agent server --growl
diff --git a/test-agent-server.js b/test-agent-server.js
new file mode 100644
index 0000000..495dd2a
--- /dev/null
+++ b/test-agent-server.js
@@ -0,0 +1,12 @@
+//all require paths must be absolute -- use __dirname
+var Agent = require('test-agent'),
+ Apps = Agent.server,
+ Suite = Agent.Suite,
+ suite = new Suite({
+ path: __dirname,
+ testDir: 'test/webcals/',
+ libDir: 'lib/webcals/',
+ testSuffix: '_test.js'
+ });
+
+server.use(Apps.Suite, suite);
diff --git a/test-agent/config.json b/test-agent/config.json
new file mode 100644
index 0000000..f4f0f2a
--- /dev/null
+++ b/test-agent/config.json
@@ -0,0 +1,3 @@
+{"tests": [
+"webcals/ical_test.js","webcals/request/abstract_test.js","webcals/request/calendar_query_test.js","webcals/request/propfind_test.js","webcals/resource_root_test.js","webcals/sax/base_test.js","webcals/sax/dav_response_test.js","webcals/sax_test.js","webcals/template_test.js","webcals/templates/calendar_data_test.js","webcals/templates/calendar_filter_test.js","webcals/xhr_test.js"
+ ]}
diff --git a/test-agent/index.html b/test-agent/index.html
new file mode 100644
index 0000000..b2e7bb5
--- /dev/null
+++ b/test-agent/index.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+ <title>Serve the tests</title>
+ <link rel="stylesheet" href="../vendor/test-agent.css" type="text/css" charset="utf-8">
+ <style type="text/css" media="all">
+ body > iframe {
+ width: 100%;
+ height: 100%;
+ visibility: visible;
+ border: 1px solid white;
+ }
+ </style>
+</head>
+<body>
+
+<!-- Test Agent UI will be loaded in here -->
+<div id="test-agent-ui">
+</div>
+
+<!-- Load the bare minimum to get the ui and runner working -->
+<script src="../vendor/test-agent.js" type="text/javascript" charset="utf-8"></script>
+<script src="./index.js" type="text/javascript" charset="utf-8"></script>
+
+</body>
+</html>
+
diff --git a/test-agent/index.js b/test-agent/index.js
new file mode 100644
index 0000000..637062b
--- /dev/null
+++ b/test-agent/index.js
@@ -0,0 +1,43 @@
+(function(window) {
+
+ var worker = new TestAgent.BrowserWorker({
+ /* this is where your tests will be loaded into */
+ sandbox: './sandbox.html'
+ });
+
+ worker.use(TestAgent.BrowserWorker.Config, {
+ /* config file which lists all available tests for the ui */
+ url: './config.json'
+ });
+
+ worker.use(TestAgent.BrowserWorker.MochaDriver, {
+ /* path to mocha */
+ mochaUrl: '../vendor/mocha.js',
+ testHelperUrl: '../test/helper.js',
+ reporter: 'HTML'
+ });
+
+ worker.use(TestAgent.BrowserWorker.Websocket);
+ worker.use(TestAgent.BrowserWorker.TestUi);
+ worker.use(TestAgent.BrowserWorker.ErrorReporting);
+
+ worker.on({
+
+ 'sandbox': function() {
+ },
+
+ 'open': function() {
+ console.log('socket open');
+ },
+
+ 'close': function() {
+ console.log('lost client trying to reconnect');
+ }
+
+ });
+
+ worker.config();
+ worker.start();
+
+}(this));
+
diff --git a/test-agent/package.json b/test-agent/package.json
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test-agent/package.json
diff --git a/test-agent/sandbox.html b/test-agent/sandbox.html
new file mode 100644
index 0000000..8b8fb94
--- /dev/null
+++ b/test-agent/sandbox.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <title>Tests</title>
+ <link rel="stylesheet" type="text/css" href="../vendor/mocha.css" />
+ <style type="text/css" media="all">
+ iframe {
+ border: none;
+ padding: 0px;
+ }
+ </style>
+ <script type="text/javascript" charset="utf-8">
+ </script>
+</head>
+
+<body>
+
+<!--
+For Mocha HTML reporter
+-->
+<div id="mocha">
+</div>
+
+<!--
+A central place to add to the dom then tear that down after your test
+-->
+<div id="test">
+</div>
+
+</body>
+</html>
+
+
diff --git a/test/helper.js b/test/helper.js
index f568bf8..12f21a6 100644
--- a/test/helper.js
+++ b/test/helper.js
@@ -1,21 +1,62 @@
(function() {
- var chai = require('chai'),
- fs = require('fs'),
- path = require('path');
- chai.Assertion.includeStack = true;
- assert = chai.assert;
+ var specialRequires = {
+ 'chai': requireChai
+ };
- loadSample = function(file, cb) {
- var root = __dirname + '/../samples/';
- fs.readFile(root + file, 'utf8', function(err, contents) {
- cb(err, contents);
- });
+ testSupport = {
+ isNode: (typeof(window) === 'undefined')
+ };
+
+ /* cross require */
+
+ testSupport.require = function cross_require(file, callback) {
+ if (file in specialRequires) {
+ return specialRequires[file](file, callback);
+ }
+
+ if (typeof(window) === 'undefined') {
+ var lib = require(__dirname + '/../' + file);
+ if (typeof(callback) !== 'undefined') {
+ callback(lib);
+ }
+ } else {
+ window.require(file, callback);
+ }
+ }
+
+ function setupChai(chai) {
+ chai.Assertion.includeStack = true;
+ assert = chai.assert;
+ }
+
+ function requireChai(file, callback) {
+ var path;
+ if (testSupport.isNode) {
+ setupChai(require('chai'));
+ } else {
+ require('/vendor/chai.js', function() {
+ setupChai(chai);
+ });
+ }
+ }
+
+ testSupport.require('chai');
+
+ testSupport.loadSample = function(file, cb) {
+ if (testSupport.isNode) {
+ var root = __dirname + '/../samples/';
+ require('fs').readFile(root + file, 'utf8', function(err, contents) {
+ cb(err, contents);
+ });
+ } else {
+ //xhr samples
+ }
};
- defineSample = function(file, cb) {
+ testSupport.defineSample = function(file, cb) {
suiteSetup(function(done) {
- loadSample(file, function(err, data) {
+ testSupport.loadSample(file, function(err, data) {
if (err) {
done(err);
}
@@ -25,12 +66,12 @@
});
};
- requireLib = function(lib) {
- return require(__dirname + '/../lib/webcals/' + lib);
+ testSupport.requireLib = function(lib, callback) {
+ testSupport.require('/lib/webcals/' + lib, callback);
};
- requireSupport = function(lib) {
- return require(__dirname + '/support/' + lib);
+ testSupport.requireSupport = function(lib) {
+ testSupport.require('/test/support/' + lib);
}
Webcals = require('../lib/webcals/webcals.js');
@@ -49,12 +90,11 @@
}
requireRequest = function(callback) {
- requireLib('xhr');
- requireLib('sax');
- requireLib('request/abstract');
- requireLib('template');
- requireSupport('fake_xhr');
-
+ testSupport.requireLib('xhr');
+ testSupport.requireLib('sax');
+ testSupport.requireLib('request/abstract');
+ testSupport.requireLib('template');
+ testSupport.requireSupport('fake_xhr');
//in the future we need a callback for browser support.
if (typeof(callback) !== 'undefined') {
@@ -64,3 +104,4 @@
}());
+
diff --git a/test/webcals/ical_test.js b/test/webcals/ical_test.js
index ed9af4a..ff589b6 100644
--- a/test/webcals/ical_test.js
+++ b/test/webcals/ical_test.js
@@ -1,11 +1,15 @@
-var fs = require('fs'),
- ics = requireLib('ical'),
- data = fs.readFileSync(__dirname + '/../../data/test.data', 'utf8');
+testSupport.requireLib('ical'),
suite('webcals/ics', function() {
+ var ical;
+
+ suiteSetup(function() {
+ ical = Webcals.require('ical');
+ });
+
test('intiailizer', function() {
- assert.ok(ics);
+ assert.ok(ical);
});
});
diff --git a/test/webcals/request/calendar_query_test.js b/test/webcals/request/calendar_query_test.js
index b1a167d..d896b43 100644
--- a/test/webcals/request/calendar_query_test.js
+++ b/test/webcals/request/calendar_query_test.js
@@ -1,6 +1,6 @@
requireRequest();
-requireLib('request/propfind');
-requireLib('request/calendar_query');
+testSupport.requireLib('request/propfind');
+testSupport.requireLib('request/calendar_query');
suite('webcals/request/calendar_query', function() {
var Propfind,
@@ -91,7 +91,7 @@ suite('webcals/request/calendar_query', function() {
xhr,
calledWith;
- defineSample('xml/propget.xml', function(data) {
+ testSupport.defineSample('xml/propget.xml', function(data) {
xml = data;
});
diff --git a/test/webcals/request/propfind_test.js b/test/webcals/request/propfind_test.js
index 1f152b0..609cc82 100644
--- a/test/webcals/request/propfind_test.js
+++ b/test/webcals/request/propfind_test.js
@@ -98,7 +98,7 @@ suite('webcals/request/propfind', function() {
xhr,
calledWith;
- defineSample('xml/propget.xml', function(data) {
+ testSupport.defineSample('xml/propget.xml', function(data) {
xml = data;
});
diff --git a/test/webcals/sax/base_test.js b/test/webcals/sax/base_test.js
index 04d8fda..63d7103 100644
--- a/test/webcals/sax/base_test.js
+++ b/test/webcals/sax/base_test.js
@@ -1,5 +1,5 @@
-requireLib('sax');
-requireLib('sax/base');
+testSupport.requireLib('sax');
+testSupport.requireLib('sax/base');
suite('webcals/sax/base', function() {
@@ -58,7 +58,7 @@ suite('webcals/sax/base', function() {
suite('base parser', function() {
var xml, data;
- defineSample('xml/simple.xml', function(data) {
+ testSupport.defineSample('xml/simple.xml', function(data) {
xml = data;
});
diff --git a/test/webcals/sax/dav_response_test.js b/test/webcals/sax/dav_response_test.js
index f91fcef..a3e3d2b 100644
--- a/test/webcals/sax/dav_response_test.js
+++ b/test/webcals/sax/dav_response_test.js
@@ -1,7 +1,7 @@
-requireLib('sax');
-requireLib('sax/base');
-requireLib('sax/dav_response');
-requireLib('ical');
+testSupport.requireLib('sax');
+testSupport.requireLib('sax/base');
+testSupport.requireLib('sax/dav_response');
+testSupport.requireLib('ical');
suite('webcals/sax/dav_response', function() {
@@ -30,7 +30,7 @@ suite('webcals/sax/dav_response', function() {
suite('parsing', function() {
var xml;
- defineSample('xml/propget.xml', function(data) {
+ testSupport.defineSample('xml/propget.xml', function(data) {
xml = data;
});
diff --git a/test/webcals/sax_test.js b/test/webcals/sax_test.js
index f9479e6..75ff496 100644
--- a/test/webcals/sax_test.js
+++ b/test/webcals/sax_test.js
@@ -1,5 +1,5 @@
-requireLib('sax');
-requireLib('sax/base');
+testSupport.requireLib('sax');
+testSupport.requireLib('sax/base');
suite('webcals/sax', function() {
@@ -255,7 +255,7 @@ suite('webcals/sax', function() {
var ResponseHandler;
var TextOnlyHandler;
- defineSample('xml/complex-tree.xml', function(data) {
+ testSupport.defineSample('xml/complex-tree.xml', function(data) {
xml = data;
});
diff --git a/test/webcals/template_test.js b/test/webcals/template_test.js
index eb1e280..a59fc9c 100644
--- a/test/webcals/template_test.js
+++ b/test/webcals/template_test.js
@@ -1,4 +1,4 @@
-requireLib('template');
+testSupport.requireLib('template');
suite('templates', function() {
diff --git a/test/webcals/templates/calendar_data_test.js b/test/webcals/templates/calendar_data_test.js
index 1828b39..290b012 100644
--- a/test/webcals/templates/calendar_data_test.js
+++ b/test/webcals/templates/calendar_data_test.js
@@ -1,5 +1,5 @@
requireRequest();
-requireLib('templates/calendar_data');
+testSupport.requireLib('templates/calendar_data');
suite('webcals/templates/calendar_data', function() {
var CalendarData;
diff --git a/test/webcals/templates/calendar_filter_test.js b/test/webcals/templates/calendar_filter_test.js
index d79883b..be8d133 100644
--- a/test/webcals/templates/calendar_filter_test.js
+++ b/test/webcals/templates/calendar_filter_test.js
@@ -1,6 +1,6 @@
requireRequest();
-requireLib('templates/calendar_data');
-requireLib('templates/calendar_filter');
+testSupport.requireLib('templates/calendar_data');
+testSupport.requireLib('templates/calendar_filter');
suite('webcals/templates/calendar_filter', function() {
var CalendarFilter;
diff --git a/test/webcals/xhr_test.js b/test/webcals/xhr_test.js
index 33f692d..75504f0 100644
--- a/test/webcals/xhr_test.js
+++ b/test/webcals/xhr_test.js
@@ -1,5 +1,5 @@
-requireLib('xhr');
-requireSupport('fake_xhr');
+testSupport.requireLib('xhr');
+testSupport.requireSupport('fake_xhr');
suite('webacls/xhr', function() {
var subject,