diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 38 | ||||
-rw-r--r-- | test-agent-server.js | 12 | ||||
-rw-r--r-- | test-agent/config.json | 3 | ||||
-rw-r--r-- | test-agent/index.html | 29 | ||||
-rw-r--r-- | test-agent/index.js | 43 | ||||
-rw-r--r-- | test-agent/package.json | 0 | ||||
-rw-r--r-- | test-agent/sandbox.html | 34 | ||||
-rw-r--r-- | test/helper.js | 85 | ||||
-rw-r--r-- | test/webcals/ical_test.js | 12 | ||||
-rw-r--r-- | test/webcals/request/calendar_query_test.js | 6 | ||||
-rw-r--r-- | test/webcals/request/propfind_test.js | 2 | ||||
-rw-r--r-- | test/webcals/sax/base_test.js | 6 | ||||
-rw-r--r-- | test/webcals/sax/dav_response_test.js | 10 | ||||
-rw-r--r-- | test/webcals/sax_test.js | 6 | ||||
-rw-r--r-- | test/webcals/template_test.js | 2 | ||||
-rw-r--r-- | test/webcals/templates/calendar_data_test.js | 2 | ||||
-rw-r--r-- | test/webcals/templates/calendar_filter_test.js | 4 | ||||
-rw-r--r-- | test/webcals/xhr_test.js | 4 |
19 files changed, 251 insertions, 48 deletions
@@ -1,3 +1,4 @@ node_modules .DS_Store data/ +vendor/ @@ -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, |