Browser teststags/v2.1.0
| @@ -6,3 +6,5 @@ yui3 | |||
| qooxdoo.mustache.js | |||
| npm-debug.log | |||
| test/render-test-browser.js | |||
| @@ -6,6 +6,13 @@ node_js: | |||
| - 0.12 | |||
| before_install: | |||
| - "test $TRAVIS_NODE_VERSION = '0.6' && npm install -g npm@1.3.26 || npm install -g npm" | |||
| script: | |||
| - npm test | |||
| - npm run test-browser | |||
| matrix: | |||
| allow_failures: | |||
| - node_js: 0.11 | |||
| env: | |||
| global: | |||
| - secure: TKDF1BgAR3S1bqFvikN6O3nbcLk20PDkL6QUVS6IkqQNtL1wXK4+2+GKcvJzOjCZg4OnXAFFtF/rfh9bcNlrGtWCG9CFkuGjUM7iONSQJr0kvCn7jris2jGGBupoPkX7MKlxaqrg6bmbp1QgA42/Hu4AlsNPCBiuFjpvL67VSqg= | |||
| - secure: sOyIxcOBaiFFUoL0+NcHPRVZm2LnG8u6qOzkrr4gSHil/qd8t91KOdJYVkZHWanI3R+T9sv8yDeZGTBz3QS993Wp0S0D3BjB2LKu8e7QFlMIms8dBQD6IR868qF6H22Qyaz5SNVwPuWVsEs8p92dc2C2xw9AvGSP3kpNe8aMjCA= | |||
| @@ -0,0 +1,16 @@ | |||
| ui: mocha-bdd | |||
| browsers: | |||
| - name: chrome | |||
| version: latest | |||
| - name: firefox | |||
| version: latest | |||
| - name: safari | |||
| version: 6..latest | |||
| - name: opera | |||
| version: 11..latest | |||
| - name: ie | |||
| version: 8..latest | |||
| - name: iphone | |||
| version: 6.0..latest | |||
| - name: android | |||
| version: 4.0..latest | |||
| @@ -522,6 +522,14 @@ Then, you can run the test with: | |||
| $ TEST=mytest npm run test-render | |||
| ### Browser tests | |||
| Browser tests are not included in `npm test` as they run for too long, although they are runned automatically on Travis upon commit. Run browser tests locally in any browser: | |||
| $ npm run test-browser-local | |||
| then point your browser to `http://localhost:8080/__zuul` | |||
| ### Troubleshooting | |||
| #### npm install fails | |||
| @@ -32,12 +32,16 @@ | |||
| }, | |||
| "scripts": { | |||
| "pretest": "eslint mustache.js", | |||
| "test": "mocha --reporter spec", | |||
| "test-render": "mocha --reporter spec test/render-test" | |||
| "test": "mocha --reporter spec test/*-test.js", | |||
| "test-render": "mocha --reporter spec test/render-test", | |||
| "pre-test-browser": "node test/create-browser-suite.js", | |||
| "test-browser": "npm run pre-test-browser && zuul -- test/context-test.js test/parse-test.js test/scanner-test.js test/render-test-browser.js", | |||
| "test-browser-local": "npm run pre-test-browser && zuul --local 8080 -- test/context-test.js test/scanner-test.js test/parse-test.js test/render-test-browser.js" | |||
| }, | |||
| "devDependencies": { | |||
| "eslint": "^0.20.0", | |||
| "mocha": "~2.1.0" | |||
| "mocha": "~2.1.0", | |||
| "zuul": "^2.1.1" | |||
| }, | |||
| "spm": { | |||
| "main": "mustache.js", | |||
| @@ -0,0 +1,14 @@ | |||
| require('./helper'); | |||
| var renderHelper = require('./render-helper'); | |||
| var fs = require('fs'); | |||
| var path = require('path'); | |||
| var _testsTemplate = path.join(__dirname, 'render-test-browser-tmpl.mustache'); | |||
| var _templateContent = fs.readFileSync(_testsTemplate).toString(); | |||
| var tests = renderHelper.getTests(); | |||
| var content = Mustache.render(_templateContent, JSON.stringify(tests)); | |||
| fs.writeFileSync(path.join(__dirname, 'render-test-browser.js'), content); | |||
| @@ -0,0 +1,55 @@ | |||
| var fs = require('fs'); | |||
| var path = require('path'); | |||
| var _files = path.join(__dirname, '_files'); | |||
| function getContents(testName, ext) { | |||
| try { | |||
| return fs.readFileSync(path.join(_files, testName + '.' + ext), 'utf8'); | |||
| } catch (ex) { | |||
| return null; | |||
| } | |||
| } | |||
| function getView(testName) { | |||
| var view = getContents(testName, 'js'); | |||
| if (!view) throw new Error('Cannot find view for test "' + testName + '"'); | |||
| return view; | |||
| } | |||
| function getPartial(testName) { | |||
| try { | |||
| return getContents(testName, 'partial'); | |||
| } catch (error) { | |||
| // No big deal. Not all tests need to test partial support. | |||
| } | |||
| } | |||
| // You can put the name of a specific test to run in the TEST environment | |||
| // variable (e.g. TEST=backslashes vows test/render-test.js) | |||
| var testToRun = process.env.TEST; | |||
| var testNames; | |||
| if (testToRun) { | |||
| testNames = [testToRun]; | |||
| } else { | |||
| testNames = fs.readdirSync(_files).filter(function (file) { | |||
| return (/\.js$/).test(file); | |||
| }).map(function (file) { | |||
| return path.basename(file).replace(/\.js$/, ''); | |||
| }); | |||
| } | |||
| function getTest(testName) { | |||
| return { | |||
| name: testName, | |||
| view: getView(testName), | |||
| template: getContents(testName, 'mustache'), | |||
| partial: getPartial(testName), | |||
| expect: getContents(testName, 'txt') | |||
| }; | |||
| } | |||
| exports.getTests = function getTests() { | |||
| return testNames.map(getTest); | |||
| }; | |||
| @@ -0,0 +1,30 @@ | |||
| require('./helper'); | |||
| describe('Mustache.render', function () { | |||
| beforeEach(function () { | |||
| Mustache.clearCache(); | |||
| }); | |||
| var i; | |||
| var tests = {{{.}}}; | |||
| for (i = 0; i < tests.length; i++) { | |||
| (function indexClosure(test) { | |||
| var view = eval(test.view); | |||
| it('knows how to render ' + test.name, function () { | |||
| var output; | |||
| if (test.partial) { | |||
| output = Mustache.render(test.template, view, { partial: test.partial }); | |||
| } else { | |||
| output = Mustache.render(test.template, view); | |||
| } | |||
| assert.equal(output, test.expect); | |||
| }); | |||
| })(tests[i]); | |||
| } | |||
| }); | |||
| @@ -1,72 +1,27 @@ | |||
| require('./helper'); | |||
| var fs = require('fs'); | |||
| var path = require('path'); | |||
| var _files = path.join(__dirname, '_files'); | |||
| var renderHelper = require('./render-helper'); | |||
| function getContents(testName, ext) { | |||
| try { | |||
| return fs.readFileSync(path.join(_files, testName + '.' + ext), 'utf8'); | |||
| } catch (ex) { | |||
| return null; | |||
| } | |||
| } | |||
| function getView(testName) { | |||
| var view = getContents(testName, 'js'); | |||
| if (!view) throw new Error('Cannot find view for test "' + testName + '"'); | |||
| return eval(view); | |||
| } | |||
| function getPartial(testName) { | |||
| try { | |||
| return getContents(testName, 'partial'); | |||
| } catch (error) { | |||
| // No big deal. Not all tests need to test partial support. | |||
| } | |||
| } | |||
| function getTest(testName) { | |||
| var test = {}; | |||
| test.view = getView(testName); | |||
| test.template = getContents(testName, 'mustache'); | |||
| test.partial = getPartial(testName); | |||
| test.expect = getContents(testName, 'txt'); | |||
| return test; | |||
| } | |||
| // You can put the name of a specific test to run in the TEST environment | |||
| // variable (e.g. TEST=backslashes vows test/render-test.js) | |||
| var testToRun = process.env.TEST; | |||
| var testNames; | |||
| if (testToRun) { | |||
| testNames = [testToRun]; | |||
| } else { | |||
| testNames = fs.readdirSync(_files).filter(function (file) { | |||
| return (/\.js$/).test(file); | |||
| }).map(function (file) { | |||
| return path.basename(file).replace(/\.js$/, ''); | |||
| }); | |||
| } | |||
| var tests = renderHelper.getTests(); | |||
| describe('Mustache.render', function () { | |||
| beforeEach(function () { | |||
| Mustache.clearCache(); | |||
| }); | |||
| testNames.forEach(function (testName) { | |||
| var test = getTest(testName); | |||
| tests.forEach(function (test) { | |||
| var view = eval(test.view); | |||
| it('knows how to render ' + testName, function () { | |||
| it('knows how to render ' + test.name, function () { | |||
| var output; | |||
| if (test.partial) { | |||
| output = Mustache.render(test.template, test.view, { partial: test.partial }); | |||
| output = Mustache.render(test.template, view, { partial: test.partial }); | |||
| } else { | |||
| output = Mustache.render(test.template, test.view); | |||
| output = Mustache.render(test.template, view); | |||
| } | |||
| assert.equal(output, test.expect); | |||
| }); | |||
| }); | |||
| }); | |||