From 39990739bd94de8786bf20db80c17d1f88199cda Mon Sep 17 00:00:00 2001 From: Arnavion Date: Mon, 13 Apr 2015 00:21:32 -0700 Subject: [PATCH] Added code for browser tests using ChromeDriver. Added a test for kfx. More tests coming soon. Fixes #21 --- gulpfile.js | 8 +- package.json | 4 +- tests/functional/kfx/kfx-1.png | Bin 0 -> 3569 bytes tests/functional/kfx/kfx-2.png | Bin 0 -> 3833 bytes tests/functional/kfx/kfx-3.png | Bin 0 -> 3833 bytes tests/functional/kfx/kfx-4.png | Bin 0 -> 4137 bytes tests/functional/kfx/kfx-5.png | Bin 0 -> 4264 bytes tests/functional/kfx/kfx-6.png | Bin 0 -> 4264 bytes tests/functional/kfx/kfx.ass | 18 +++++ tests/functional/kfx/kfx.js | 35 +++++++++ tests/intern.js | 7 ++ tests/support/browser-test-page.css | 25 ++++++ tests/support/browser-test-page.html | 12 +++ tests/support/test-page.js | 113 +++++++++++++++++++++++++++ 14 files changed, 220 insertions(+), 2 deletions(-) create mode 100644 tests/functional/kfx/kfx-1.png create mode 100644 tests/functional/kfx/kfx-2.png create mode 100644 tests/functional/kfx/kfx-3.png create mode 100644 tests/functional/kfx/kfx-4.png create mode 100644 tests/functional/kfx/kfx-5.png create mode 100644 tests/functional/kfx/kfx-6.png create mode 100644 tests/functional/kfx/kfx.ass create mode 100644 tests/functional/kfx/kfx.js create mode 100644 tests/support/browser-test-page.css create mode 100644 tests/support/browser-test-page.html create mode 100644 tests/support/test-page.js diff --git a/gulpfile.js b/gulpfile.js index 4f7c45a..643503e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -129,6 +129,12 @@ gulp.task("test-minified", ["libjass.min.js"], function (callback) { }); }); +gulp.task("test-browser", ["libjass.min.js"], function (callback) { + npm.load(function () { + npm.commands["run-script"](["test-browser"], callback); + }); +}); + gulp.task("test", ["test-lib", "test-minified"]); gulp.task("demo", ["libjass.js"], function () { @@ -143,7 +149,7 @@ gulp.task("doc", ["libjass.js"], function () { .pipe(gulp.dest("../libjass-gh-pages/")); }); -gulp.task("dist", ["clean", "default", "test", "demo", "doc"], function () { +gulp.task("dist", ["clean", "default", "test", "test-browser", "demo", "doc"], function () { var inputFiles = [ "./README.md", "./CHANGELOG.md", "./LICENSE", "./lib/libjass.js", "./lib/libjass.js.map", diff --git a/package.json b/package.json index 244be67..a218cc5 100644 --- a/package.json +++ b/package.json @@ -19,12 +19,14 @@ "prepublish": "gulp clean default", "test": "gulp test", "test-lib": "intern-client config=./tests/intern reporters=pretty", - "test-minified": "intern-client config=./tests/intern reporters=pretty minified=true" + "test-minified": "intern-client config=./tests/intern reporters=pretty minified=true", + "test-browser": "intern-runner config=./tests/intern" }, "devDependencies": { "gulp": "3.x", "intern": "2.x", "npm": "2.x", + "pngjs": "0.4.0", "typescript": "1.5.0-alpha", "uglify-js": "2.x >=2.4.16", "vinyl": "latest" diff --git a/tests/functional/kfx/kfx-1.png b/tests/functional/kfx/kfx-1.png new file mode 100644 index 0000000000000000000000000000000000000000..064c1d4deebc016f02e60b01e1c7c17fb9109168 GIT binary patch literal 3569 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 literal 0 HcmV?d00001 diff --git a/tests/functional/kfx/kfx-3.png b/tests/functional/kfx/kfx-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e053b5768bc2e3289e3f04efab04bbe0e6ea81fd GIT binary patch literal 3833 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 literal 0 HcmV?d00001 diff --git a/tests/functional/kfx/kfx-4.png b/tests/functional/kfx/kfx-4.png new file mode 100644 index 0000000000000000000000000000000000000000..c623d8c4c6b1ed90c6b3c25d6194a81ee0a785cc GIT binary patch literal 4137 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 G(SHEx_4OhE literal 0 HcmV?d00001 diff --git a/tests/functional/kfx/kfx-5.png b/tests/functional/kfx/kfx-5.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b93ecd6d6440bc7d64f38acb3f26a24a39902b GIT binary patch literal 4264 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 CVmv_r literal 0 HcmV?d00001 diff --git a/tests/functional/kfx/kfx-6.png b/tests/functional/kfx/kfx-6.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b93ecd6d6440bc7d64f38acb3f26a24a39902b GIT binary patch literal 4264 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 CVmv_r literal 0 HcmV?d00001 diff --git a/tests/functional/kfx/kfx.ass b/tests/functional/kfx/kfx.ass new file mode 100644 index 0000000..2bb9c7a --- /dev/null +++ b/tests/functional/kfx/kfx.ass @@ -0,0 +1,18 @@ +[Script Info] +; Script generated by Aegisub 3.2.2 +; http://www.aegisub.org/ +Title: Default Aegisub file +ScriptType: v4.00+ +WrapStyle: 0 +ScaledBorderAndShadow: yes +YCbCr Matrix: None +PlayResX: 256 +PlayResY: 144 + +[V4+ Styles] +Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding +Style: Default,Arial,36,&H00FFFFFF,&H000000FF,&H00000000,&H96000000,0,0,0,0,100,100,0,0,1,2,1.2,2,15,15,15,1 + +[Events] +Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text +Dialogue: 0,0:00:01.00,0:00:07.00,Default,,0,0,0,,{\k100}{\k200}a{\k100}bc{\k200}d diff --git a/tests/functional/kfx/kfx.js b/tests/functional/kfx/kfx.js new file mode 100644 index 0000000..dce303f --- /dev/null +++ b/tests/functional/kfx/kfx.js @@ -0,0 +1,35 @@ +/** + * libjass + * + * https://github.com/Arnavion/libjass + * + * Copyright 2013 Arnav Singh + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(["intern!tdd", "require", "tests/support/test-page"], function (tdd, require, TestPage) { + tdd.suite("WebDriver", function () { + tdd.test("Basic", function () { + var testPage = new TestPage(this.remote, require.toUrl("tests/support/browser-test-page.html"), "/tests/functional/kfx/kfx.ass", 256, 144); + return testPage + .prepare() + .then(function (testPage) { return testPage.seekAndCompareScreenshot(1.5, require.toUrl("./kfx-1.png")); }) + .then(function (testPage) { return testPage.seekAndCompareScreenshot(2.5, require.toUrl("./kfx-2.png")); }) + .then(function (testPage) { return testPage.seekAndCompareScreenshot(3.5, require.toUrl("./kfx-3.png")); }) + .then(function (testPage) { return testPage.seekAndCompareScreenshot(4.5, require.toUrl("./kfx-4.png")); }) + .then(function (testPage) { return testPage.seekAndCompareScreenshot(5.5, require.toUrl("./kfx-5.png")); }) + .then(function (testPage) { return testPage.seekAndCompareScreenshot(6.5, require.toUrl("./kfx-6.png")); }); + }); + }); +}); diff --git a/tests/intern.js b/tests/intern.js index 3d50f06..634a6bb 100644 --- a/tests/intern.js +++ b/tests/intern.js @@ -28,7 +28,14 @@ define(["intern"], function (intern) { "tests/unit/tags", "tests/unit/webworker" ], + functionalSuites: [ + "tests/functional/kfx/kfx" + ], excludeInstrumentation: /^(?:tests|node_modules)[/\\]/, + tunnel: "NullTunnel", + environments: [{ + browserName: "chrome", + }], }; if (intern.args.minified === "true") { diff --git a/tests/support/browser-test-page.css b/tests/support/browser-test-page.css new file mode 100644 index 0000000..0247eac --- /dev/null +++ b/tests/support/browser-test-page.css @@ -0,0 +1,25 @@ +/** + * libjass + * + * https://github.com/Arnavion/libjass + * + * Copyright 2013 Arnav Singh + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +body { + margin: 0; + padding: 0; + box-sizing: border-box; +} diff --git a/tests/support/browser-test-page.html b/tests/support/browser-test-page.html new file mode 100644 index 0000000..6619a9e --- /dev/null +++ b/tests/support/browser-test-page.html @@ -0,0 +1,12 @@ + + + + >2012 >Streaman Animu + + + + + +
+ + diff --git a/tests/support/test-page.js b/tests/support/test-page.js new file mode 100644 index 0000000..929b1d9 --- /dev/null +++ b/tests/support/test-page.js @@ -0,0 +1,113 @@ +/** + * libjass + * + * https://github.com/Arnavion/libjass + * + * Copyright 2013 Arnav Singh + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define([ + "intern/dojo/node!fs", + "intern/dojo/node!path", + "intern/dojo/node!pngjs", + "intern/chai!assert", + "intern/dojo/node!intern/node_modules/leadfoot/helpers/pollUntil", + "lib/libjass" +], function (fs, path, pngjs, assert, pollUntil, libjass) { + function TestPage(remote, pageUrl, assUrl, targetWidth, targetHeight) { + this._remote = remote; + this._pageUrl = pageUrl; + this._assUrl = assUrl; + this._targetWidth = targetWidth; + this._targetHeight = targetHeight; + } + + TestPage.prototype.prepare = function () { + var _this = this; + + this._remote.session.setExecuteAsyncTimeout(10000); + + return this._remote + .setWindowSize(1280, 720) + .get(this._pageUrl) + .then(pollUntil('return (document.readyState === "complete") ? true : null;'), 100) + .executeAsync(function (assUrl, callback) { + window.clock = new libjass.renderers.ManualClock(); + var libjassSubsWrapper = document.querySelector(".libjass-wrapper"); + + libjass.ASS.fromUrl(assUrl).then(function (ass) { + libjassSubsWrapper.style.width = ass.properties.resolutionX + "px"; + libjassSubsWrapper.style.height = ass.properties.resolutionY + "px"; + + var renderer = new libjass.renderers.WebRenderer(ass, clock, libjassSubsWrapper); + renderer.addEventListener("ready", function () { + renderer.resize(ass.properties.resolutionX, ass.properties.resolutionY); + clock.pause(); + callback(); + }); + }); + }, [this._assUrl]) + .then(function () { return _this; }); + }; + + TestPage.prototype.seekAndCompareScreenshot = function (time, filename) { + var _this = this; + + return this._remote + .execute(function (time) { clock.seek(time); }, [time]) + .takeScreenshot() + .then(function (buffer) { + return new libjass.Promise(function (resolve, reject) { + new pngjs.PNG().parse(buffer, function (error, input) { + if (error !== null) { + reject(error); + return; + } + + var output = new pngjs.PNG({ width: _this._targetWidth, height: _this._targetHeight }); + input.bitblt(output, 0, 0, _this._targetWidth, _this._targetHeight, 0, 0); + resolve(output); + }); + }); + }) + .then(function (screenshot) { + return new libjass.Promise(function (resolve, reject) { + var baselineBuffer = fs.readFileSync(filename); + new pngjs.PNG().parse(baselineBuffer, function (error, baseline) { + if (error !== null) { + reject(error); + return; + } + + try { + assert.equal(0, screenshot.data.compare(baseline.data), filename + " does not match!"); + resolve(); + } + catch (ex) { + reject(ex); + } + }); + }).catch(function (err) { + return new libjass.Promise(function (resolve, reject) { + var newFilename = filename.substr(0, filename.length - path.extname(filename).length) + "-new" + path.extname(filename); + screenshot.pack().pipe(fs.createWriteStream(newFilename)).once("error", reject).on("finish", function () { reject(err); }); + }); + }); + }) + .then(function () { return _this; }); + }; + + return TestPage; +});