diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..3147878 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +script: script/test +language: node_js +node_js: +- '0.10' diff --git a/script/test b/script/test new file mode 100755 index 0000000..e3508e8 --- /dev/null +++ b/script/test @@ -0,0 +1,23 @@ +#!/bin/bash +set -e + +if [ -t 1 ]; then + red="$(printf "\033[31m")" + brightred="$(printf "\033[31;1m")" + green="$(printf "\033[32m")" + reset="$(printf "\033[m")" +else + red= + brightred= + green= + reset= +fi + +phantomjs tests/runner.coffee tests/qunit.html | sed -E " + # failure line: + s/^(✘.+)/${red}\\1${reset}/ + # failure details: + s/^( .+)/${brightred}\\1${reset}/ + # success marker: + s/(✔︎)/${green}\\1${reset}/ +" diff --git a/tests/duplicationTest.html b/tests/duplicationTest.html deleted file mode 100644 index 97df0a1..0000000 --- a/tests/duplicationTest.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - The below box will be green in browsers with native classList support. - It will be red if the classList polyfill doesn't handle duplicate classes
-
- - diff --git a/tests/qunit.html b/tests/qunit.html index 8f15cb9..d80d3b4 100644 --- a/tests/qunit.html +++ b/tests/qunit.html @@ -11,5 +11,6 @@ + diff --git a/tests/remove.js b/tests/remove.js new file mode 100644 index 0000000..24cda33 --- /dev/null +++ b/tests/remove.js @@ -0,0 +1,10 @@ +QUnit.module("classList.remove"); + +QUnit.test("Removes duplicated instances of class", function(assert) { + var el = document.createElement("p"), cList = el.classList; + el.className = "ho ho ho" + + cList.remove("ho"); + assert.ok(!cList.contains("ho"), "Should remove all instances of 'ho'"); + assert.strictEqual(el.className, "") +}); diff --git a/tests/runner.coffee b/tests/runner.coffee new file mode 100644 index 0000000..be9c56a --- /dev/null +++ b/tests/runner.coffee @@ -0,0 +1,46 @@ +urls = require('system').args.slice(1) +page = require('webpage').create() +timeout = 3000 + +qunitHooks = -> + window.document.addEventListener 'DOMContentLoaded', -> + for callback in ['log', 'testDone', 'done'] + do (callback) -> + QUnit[callback] (result) -> + window.callPhantom + name: "QUnit.#{callback}" + data: result + +page.onInitialized = -> page.evaluate qunitHooks + +page.onConsoleMessage = (msg) -> console.log msg + +page.onCallback = (event) -> + if event.name is 'QUnit.log' + details = event.data + if details.result is false + console.log "✘ #{details.module}: #{details.name}" + if details.message and details.message isnt "failed" + console.log " #{details.message}" + if "actual" of details + console.log " expected: #{details.expected}" + console.log " actual: #{details.actual}" + else if event.name is 'QUnit.testDone' + result = event.data + unless result.failed + console.log "✔︎ #{result.module}: #{result.name}" + else if event.name is 'QUnit.done' + res = event.data + console.log "#{res.total} tests, #{res.failed} failed. Done in #{res.runtime} ms" + phantom.exit if !res.total or res.failed then 1 else 0 + +for url in urls + page.open url, (status) -> + if status isnt 'success' + console.error "failed opening #{url}: #{status}" + phantom.exit 1 + else + setTimeout -> + console.error "ERROR: Test execution has timed out" + phantom.exit 1 + , timeout