Merge pull request #12532 from Snuffleupagus/refactor-font-tests

Modernize, and remove SystemJS usage from, the font-tests
This commit is contained in:
Tim van der Meij 2020-10-27 00:06:47 +01:00 committed by GitHub
commit 8098102714
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 208 additions and 161 deletions

View File

@ -13,5 +13,4 @@ test/tmp/
test/features/ test/features/
test/pdfs/ test/pdfs/
test/resources/ test/resources/
test/font/*_spec.js
*~/ *~/

10
test/font/.eslintrc Normal file
View File

@ -0,0 +1,10 @@
{
"extends": [
"../.eslintrc"
],
"rules": {
// ECMAScript 6
"no-var": "error",
},
}

View File

@ -1,10 +1,14 @@
'use strict'; import { decodeFontData, ttx, verifyTtxOutput } from "./fontutils.js";
describe('font1', function() { describe("font1", function () {
var font1_1 = decodeFontData('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'); const font1_1 = decodeFontData(
describe('test harness testing', function() { // eslint-disable-next-line max-len
it('returns output', function(done) { "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"
ttx(font1_1, function(output) { );
describe("test harness testing", function () {
it("returns output", function (done) {
ttx(font1_1, function (output) {
verifyTtxOutput(output); verifyTtxOutput(output);
expect(/<ttFont /.test(output)).toEqual(true); expect(/<ttFont /.test(output)).toEqual(true);
expect(/<\/ttFont>/.test(output)).toEqual(true); expect(/<\/ttFont>/.test(output)).toEqual(true);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,20 +5,22 @@
<link rel="stylesheet" type="text/css" href="../../node_modules/jasmine-core/lib/jasmine-core/jasmine.css"> <link rel="stylesheet" type="text/css" href="../../node_modules/jasmine-core/lib/jasmine-core/jasmine.css">
<script src="../../node_modules/systemjs/dist/system.js"></script>
<script src="../../systemjs.config.js"></script>
<script src="../../node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script> <script src="../../node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script>
<script src="../../node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script> <script src="../../node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script>
<script src="../unit/testreporter.js"></script> <script src="../unit/testreporter.js"></script>
<script src="jasmine-boot.js"></script>
<script src="fontutils.js"></script> <script defer src="../../node_modules/es-module-shims/dist/es-module-shims.js"></script>
<script type="importmap-shim">
<!-- include spec files here... --> {
<script src="font_core_spec.js"></script> "imports": {
<script src="font_os2_spec.js"></script> "pdfjs/": "../../src/",
<script src="font_post_spec.js"></script> "pdfjs-lib": "../../src/pdf.js",
<script src="font_fpgm_spec.js"></script> "pdfjs-web/": "../../web/",
"pdfjs-test/": "../"
}
}
</script>
<script src="jasmine-boot.js" type="module-shim"></script>
</head> </head>
<body> <body>
</body> </body>

View File

@ -14,23 +14,20 @@
* limitations under the License. * limitations under the License.
*/ */
"use strict"; const base64alphabet =
var base64alphabet =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// eslint-disable-next-line no-unused-vars
function decodeFontData(base64) { function decodeFontData(base64) {
var result = []; const result = [];
var bits = 0, let bits = 0,
bitsLength = 0; bitsLength = 0;
for (var i = 0, ii = base64.length; i < ii; i++) { for (let i = 0, ii = base64.length; i < ii; i++) {
var ch = base64[i]; const ch = base64[i];
if (ch <= " ") { if (ch <= " ") {
continue; continue;
} }
var index = base64alphabet.indexOf(ch); const index = base64alphabet.indexOf(ch);
if (index < 0) { if (index < 0) {
throw new Error("Invalid character"); throw new Error("Invalid character");
} }
@ -41,7 +38,7 @@ function decodeFontData(base64) {
bitsLength += 6; bitsLength += 6;
if (bitsLength >= 8) { if (bitsLength >= 8) {
bitsLength -= 8; bitsLength -= 8;
var code = (bits >> bitsLength) & 0xff; const code = (bits >> bitsLength) & 0xff;
result.push(code); result.push(code);
} }
} }
@ -49,16 +46,16 @@ function decodeFontData(base64) {
} }
function encodeFontData(data) { function encodeFontData(data) {
var buffer = ""; let buffer = "";
var i, n; let i, n;
for (i = 0, n = data.length; i < n; i += 3) { for (i = 0, n = data.length; i < n; i += 3) {
var b1 = data[i] & 0xff; const b1 = data[i] & 0xff;
var b2 = data[i + 1] & 0xff; const b2 = data[i + 1] & 0xff;
var b3 = data[i + 2] & 0xff; const b3 = data[i + 2] & 0xff;
var d1 = b1 >> 2, const d1 = b1 >> 2,
d2 = ((b1 & 3) << 4) | (b2 >> 4); d2 = ((b1 & 3) << 4) | (b2 >> 4);
var d3 = i + 1 < n ? ((b2 & 0xf) << 2) | (b3 >> 6) : 64; const d3 = i + 1 < n ? ((b2 & 0xf) << 2) | (b3 >> 6) : 64;
var d4 = i + 2 < n ? b3 & 0x3f : 64; const d4 = i + 2 < n ? b3 & 0x3f : 64;
buffer += buffer +=
base64alphabet.charAt(d1) + base64alphabet.charAt(d1) +
base64alphabet.charAt(d2) + base64alphabet.charAt(d2) +
@ -68,12 +65,11 @@ function encodeFontData(data) {
return buffer; return buffer;
} }
// eslint-disable-next-line no-unused-vars
function ttx(data, callback) { function ttx(data, callback) {
var xhr = new XMLHttpRequest(); const xhr = new XMLHttpRequest();
xhr.open("POST", "/ttx"); xhr.open("POST", "/ttx");
var encodedData = encodeFontData(data); const encodedData = encodeFontData(data);
xhr.setRequestHeader("Content-type", "text/plain"); xhr.setRequestHeader("Content-type", "text/plain");
xhr.setRequestHeader("Content-length", encodedData.length); xhr.setRequestHeader("Content-length", encodedData.length);
@ -89,10 +85,11 @@ function ttx(data, callback) {
xhr.send(encodedData); xhr.send(encodedData);
} }
// eslint-disable-next-line no-unused-vars
function verifyTtxOutput(output) { function verifyTtxOutput(output) {
var m = /^<error>(.*?)<\/error>/.exec(output); const m = /^<error>(.*?)<\/error>/.exec(output);
if (m) { if (m) {
throw m[1]; throw m[1];
} }
} }
export { decodeFontData, encodeFontData, ttx, verifyTtxOutput };

View File

@ -40,26 +40,20 @@
"use strict"; "use strict";
function initializePDFJS(callback) { async function initializePDFJS(callback) {
Promise.all([ await Promise.all(
SystemJS.import("pdfjs/core/fonts.js"), [
SystemJS.import("pdfjs/core/stream.js"), "pdfjs-test/font/font_core_spec.js",
SystemJS.import("pdfjs/core/primitives.js"), "pdfjs-test/font/font_os2_spec.js",
SystemJS.import("pdfjs/core/cmap.js"), "pdfjs-test/font/font_post_spec.js",
]).then(function (modules) { "pdfjs-test/font/font_fpgm_spec.js",
var fonts = modules[0], ].map(function (moduleName) {
stream = modules[1], // eslint-disable-next-line no-unsanitized/method
primitives = modules[2], return import(moduleName);
cmap = modules[3]; })
// Expose some of the PDFJS members to global scope for tests. );
window.Font = fonts.Font;
window.ToUnicodeMap = fonts.ToUnicodeMap;
window.Stream = stream.Stream;
window.Name = primitives.Name;
window.CMapFactory = cmap.CMapFactory;
callback(); callback();
});
} }
(function () { (function () {
@ -67,36 +61,36 @@ function initializePDFJS(callback) {
jasmineRequire.html(jasmine); jasmineRequire.html(jasmine);
var env = jasmine.getEnv(); const env = jasmine.getEnv();
var jasmineInterface = jasmineRequire.interface(jasmine, env); const jasmineInterface = jasmineRequire.interface(jasmine, env);
extend(window, jasmineInterface); extend(window, jasmineInterface);
// Runner Parameters // Runner Parameters
var queryString = new jasmine.QueryString({ const queryString = new jasmine.QueryString({
getWindowLocation() { getWindowLocation() {
return window.location; return window.location;
}, },
}); });
var config = { const config = {
failFast: queryString.getParam("failFast"), failFast: queryString.getParam("failFast"),
oneFailurePerSpec: queryString.getParam("oneFailurePerSpec"), oneFailurePerSpec: queryString.getParam("oneFailurePerSpec"),
hideDisabled: queryString.getParam("hideDisabled"), hideDisabled: queryString.getParam("hideDisabled"),
}; };
var random = queryString.getParam("random"); const random = queryString.getParam("random");
if (random !== undefined && random !== "") { if (random !== undefined && random !== "") {
config.random = random; config.random = random;
} }
var seed = queryString.getParam("seed"); const seed = queryString.getParam("seed");
if (seed) { if (seed) {
config.seed = seed; config.seed = seed;
} }
// Reporters // Reporters
var htmlReporter = new jasmine.HtmlReporter({ const htmlReporter = new jasmine.HtmlReporter({
env, env,
navigateWithNewParam(key, value) { navigateWithNewParam(key, value) {
return queryString.navigateWithNewParam(key, value); return queryString.navigateWithNewParam(key, value);
@ -119,13 +113,13 @@ function initializePDFJS(callback) {
env.addReporter(htmlReporter); env.addReporter(htmlReporter);
if (queryString.getParam("browser")) { if (queryString.getParam("browser")) {
var testReporter = new TestReporter(queryString.getParam("browser")); const testReporter = new TestReporter(queryString.getParam("browser"));
env.addReporter(testReporter); env.addReporter(testReporter);
} }
// Filter which specs will be run by matching the start of the full name // Filter which specs will be run by matching the start of the full name
// against the `spec` query param. // against the `spec` query param.
var specFilter = new jasmine.HtmlSpecFilter({ const specFilter = new jasmine.HtmlSpecFilter({
filterString() { filterString() {
return queryString.getParam("spec"); return queryString.getParam("spec");
}, },
@ -140,26 +134,26 @@ function initializePDFJS(callback) {
// Sets longer timeout. // Sets longer timeout.
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
// Replace the browser window's `onload`, ensure it's called, and then run
// all of the loaded specs. This includes initializing the `HtmlReporter`
// instance and then executing the loaded Jasmine environment.
var currentWindowOnload = window.onload;
window.onload = function () {
if (currentWindowOnload) {
currentWindowOnload();
}
initializePDFJS(function () {
htmlReporter.initialize();
env.execute();
});
};
function extend(destination, source) { function extend(destination, source) {
for (var property in source) { for (const property in source) {
destination[property] = source[property]; destination[property] = source[property];
} }
return destination; return destination;
} }
function fontTestInit() {
initializePDFJS(function () {
htmlReporter.initialize();
env.execute();
});
}
if (
document.readyState === "interactive" ||
document.readyState === "complete"
) {
fontTestInit();
} else {
document.addEventListener("DOMContentLoaded", fontTestInit, true);
}
})(); })();

View File

@ -16,34 +16,34 @@
"use strict"; "use strict";
var fs = require("fs"); const fs = require("fs");
var path = require("path"); const path = require("path");
var spawn = require("child_process").spawn; const spawn = require("child_process").spawn;
var ttxResourcesHome = path.join(__dirname, "..", "ttx"); const ttxResourcesHome = path.join(__dirname, "..", "ttx");
var nextTTXTaskId = Date.now(); let nextTTXTaskId = Date.now();
function runTtx(ttxResourcesHomePath, fontPath, registerOnCancel, callback) { function runTtx(ttxResourcesHomePath, fontPath, registerOnCancel, callback) {
fs.realpath(ttxResourcesHomePath, function (error, realTtxResourcesHomePath) { fs.realpath(ttxResourcesHomePath, function (error, realTtxResourcesHomePath) {
var fontToolsHome = path.join(realTtxResourcesHomePath, "fonttools-code"); const fontToolsHome = path.join(realTtxResourcesHomePath, "fonttools-code");
fs.realpath(fontPath, function (errorFontPath, realFontPath) { fs.realpath(fontPath, function (errorFontPath, realFontPath) {
var ttxPath = path.join("Tools", "ttx"); const ttxPath = path.join("Tools", "ttx");
if (!fs.existsSync(path.join(fontToolsHome, ttxPath))) { if (!fs.existsSync(path.join(fontToolsHome, ttxPath))) {
callback("TTX was not found, please checkout PDF.js submodules"); callback("TTX was not found, please checkout PDF.js submodules");
return; return;
} }
var ttxEnv = { const ttxEnv = {
PYTHONPATH: path.join(fontToolsHome, "Lib"), PYTHONPATH: path.join(fontToolsHome, "Lib"),
PYTHONDONTWRITEBYTECODE: true, PYTHONDONTWRITEBYTECODE: true,
}; };
var ttxStdioMode = "ignore"; const ttxStdioMode = "ignore";
var ttx = spawn("python", [ttxPath, realFontPath], { const ttx = spawn("python", [ttxPath, realFontPath], {
cwd: fontToolsHome, cwd: fontToolsHome,
stdio: ttxStdioMode, stdio: ttxStdioMode,
env: ttxEnv, env: ttxEnv,
}); });
var ttxRunError; let ttxRunError;
registerOnCancel(function (reason) { registerOnCancel(function (reason) {
ttxRunError = reason; ttxRunError = reason;
callback(reason); callback(reason);
@ -68,10 +68,10 @@ exports.translateFont = function translateFont(
registerOnCancel, registerOnCancel,
callback callback
) { ) {
var buffer = Buffer.from(content, "base64"); const buffer = Buffer.from(content, "base64");
var taskId = (nextTTXTaskId++).toString(); const taskId = (nextTTXTaskId++).toString();
var fontPath = path.join(ttxResourcesHome, taskId + ".otf"); const fontPath = path.join(ttxResourcesHome, taskId + ".otf");
var resultPath = path.join(ttxResourcesHome, taskId + ".ttx"); const resultPath = path.join(ttxResourcesHome, taskId + ".ttx");
fs.writeFileSync(fontPath, buffer); fs.writeFileSync(fontPath, buffer);
runTtx(ttxResourcesHome, fontPath, registerOnCancel, function (err) { runTtx(ttxResourcesHome, fontPath, registerOnCancel, function (err) {