actually wait for fonts to be loaded, and write out a log of failed eq comparisons
This commit is contained in:
parent
5585c6a5fe
commit
4ae16721fa
25
test.py
25
test.py
@ -9,6 +9,7 @@ def prompt(question):
|
|||||||
|
|
||||||
ANAL = True
|
ANAL = True
|
||||||
DEFAULT_MANIFEST_FILE = 'test_manifest.json'
|
DEFAULT_MANIFEST_FILE = 'test_manifest.json'
|
||||||
|
EQLOG_FILE = 'eq.log'
|
||||||
REFDIR = 'ref'
|
REFDIR = 'ref'
|
||||||
TMPDIR = 'tmp'
|
TMPDIR = 'tmp'
|
||||||
VERBOSE = False
|
VERBOSE = False
|
||||||
@ -35,6 +36,7 @@ class State:
|
|||||||
numEqNoSnapshot = 0
|
numEqNoSnapshot = 0
|
||||||
numFBFFailures = 0
|
numFBFFailures = 0
|
||||||
numLoadFailures = 0
|
numLoadFailures = 0
|
||||||
|
eqLog = None
|
||||||
|
|
||||||
class Result:
|
class Result:
|
||||||
def __init__(self, snapshot, failure):
|
def __init__(self, snapshot, failure):
|
||||||
@ -190,6 +192,7 @@ def check(task, results, browser):
|
|||||||
def checkEq(task, results, browser):
|
def checkEq(task, results, browser):
|
||||||
pfx = os.path.join(REFDIR, sys.platform, browser, task['id'])
|
pfx = os.path.join(REFDIR, sys.platform, browser, task['id'])
|
||||||
results = results[0]
|
results = results[0]
|
||||||
|
taskId = task['id']
|
||||||
|
|
||||||
passed = True
|
passed = True
|
||||||
for page in xrange(len(results)):
|
for page in xrange(len(results)):
|
||||||
@ -208,7 +211,21 @@ def checkEq(task, results, browser):
|
|||||||
|
|
||||||
eq = (ref == snapshot)
|
eq = (ref == snapshot)
|
||||||
if not eq:
|
if not eq:
|
||||||
print 'TEST-UNEXPECTED-FAIL | eq', task['id'], '| in', browser, '| rendering of page', page + 1, '!= reference rendering'
|
print 'TEST-UNEXPECTED-FAIL | eq', taskId, '| in', browser, '| rendering of page', page + 1, '!= reference rendering'
|
||||||
|
# XXX need to dump this always, somehow, when we have
|
||||||
|
# the reference repository
|
||||||
|
if State.masterMode:
|
||||||
|
if not State.eqLog:
|
||||||
|
State.eqLog = open(EQLOG_FILE, 'w')
|
||||||
|
eqLog = State.eqLog
|
||||||
|
|
||||||
|
# NB: this follows the format of Mozilla reftest
|
||||||
|
# output so that we can reuse its reftest-analyzer
|
||||||
|
# script
|
||||||
|
print >>eqLog, 'REFTEST TEST-UNEXPECTED-FAIL |', browser +'-'+ taskId +'-page'+ str(page + 1), '| image comparison (==)'
|
||||||
|
print >>eqLog, 'REFTEST IMAGE 1 (TEST):', snapshot
|
||||||
|
print >>eqLog, 'REFTEST IMAGE 2 (REFERENCE):', ref
|
||||||
|
|
||||||
passed = False
|
passed = False
|
||||||
State.numEqFailures += 1
|
State.numEqFailures += 1
|
||||||
|
|
||||||
@ -292,6 +309,12 @@ def main(args):
|
|||||||
masterMode = (args[0] == '-m')
|
masterMode = (args[0] == '-m')
|
||||||
manifestFile = args[0] if not masterMode else manifestFile
|
manifestFile = args[0] if not masterMode else manifestFile
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
masterMode = True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
setUp(manifestFile, masterMode)
|
setUp(manifestFile, masterMode)
|
||||||
|
|
||||||
server = HTTPServer(('127.0.0.1', 8080), PDFTestHandler)
|
server = HTTPServer(('127.0.0.1', 8080), PDFTestHandler)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>pdf.js test slave</title>
|
<title>pdf.js test slave</title>
|
||||||
|
<style type="text/css"></style>
|
||||||
<script type="text/javascript" src="pdf.js"></script>
|
<script type="text/javascript" src="pdf.js"></script>
|
||||||
<script type="text/javascript" src="fonts.js"></script>
|
<script type="text/javascript" src="fonts.js"></script>
|
||||||
<script type="text/javascript" src="glyphlist.js"></script>
|
<script type="text/javascript" src="glyphlist.js"></script>
|
||||||
@ -31,7 +32,7 @@ function load() {
|
|||||||
stdout = document.getElementById("stdout");
|
stdout = document.getElementById("stdout");
|
||||||
|
|
||||||
log("Harness thinks this browser is '"+ browser +"'\n");
|
log("Harness thinks this browser is '"+ browser +"'\n");
|
||||||
log("Fetching manifest ...");
|
log("Fetching manifest "+ manifestFile +"...");
|
||||||
|
|
||||||
var r = new XMLHttpRequest();
|
var r = new XMLHttpRequest();
|
||||||
r.open("GET", manifestFile, false);
|
r.open("GET", manifestFile, false);
|
||||||
@ -81,38 +82,69 @@ function nextPage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
failure = '';
|
failure = '';
|
||||||
log(" drawing page "+ currentTask.pageNum +"...");
|
log(" loading page "+ currentTask.pageNum +"... ");
|
||||||
|
|
||||||
var ctx = canvas.getContext("2d");
|
var ctx = canvas.getContext("2d");
|
||||||
clear(ctx);
|
clear(ctx);
|
||||||
|
|
||||||
var fonts = [];
|
var fonts = [];
|
||||||
|
var fontsReady = true;
|
||||||
var gfx = new CanvasGraphics(ctx);
|
var gfx = new CanvasGraphics(ctx);
|
||||||
try {
|
try {
|
||||||
currentPage = pdfDoc.getPage(currentTask.pageNum);
|
currentPage = pdfDoc.getPage(currentTask.pageNum);
|
||||||
currentPage.compile(gfx, fonts);
|
currentPage.compile(gfx, fonts);
|
||||||
|
|
||||||
|
// Inspect fonts and translate the missing ones
|
||||||
|
var count = fonts.length;
|
||||||
|
for (var i = 0; i < count; ++i) {
|
||||||
|
var font = fonts[i];
|
||||||
|
if (Fonts[font.name]) {
|
||||||
|
fontsReady = fontsReady && !Fonts[font.name].loading;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
new Font(font.name, font.file, font.properties);
|
||||||
|
fontsReady = false;
|
||||||
|
}
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
failure = 'compile: '+ e.toString();
|
failure = 'compile: '+ e.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO load fonts
|
var checkFontsLoadedIntervalTimer = null;
|
||||||
setTimeout(function() {
|
function checkFontsLoaded() {
|
||||||
if (!failure) {
|
for (var i = 0; i < count; i++) {
|
||||||
try {
|
if (Fonts[font.name].loading) {
|
||||||
currentPage.display(gfx);
|
return;
|
||||||
} catch(e) {
|
|
||||||
failure = 'render: '+ e.toString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
currentTask.taskDone = (currentTask.pageNum == pdfDoc.numPages
|
}
|
||||||
&& (1 + currentTask.round) == currentTask.rounds);
|
window.clearInterval(checkFontsLoadedIntervalTimer);
|
||||||
sendTaskResult(canvas.toDataURL("image/png"));
|
|
||||||
log("done"+ (failure ? " (failed!)" : "") +"\n");
|
|
||||||
|
|
||||||
++currentTask.pageNum, nextPage();
|
snapshotCurrentPage(gfx);
|
||||||
},
|
}
|
||||||
0
|
|
||||||
);
|
if (failure || fontsReady) {
|
||||||
|
snapshotCurrentPage(gfx);
|
||||||
|
} else {
|
||||||
|
checkFontsLoadedIntervalTimer = setInterval(checkFontsLoaded, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function snapshotCurrentPage(gfx) {
|
||||||
|
log("done, snapshotting... ");
|
||||||
|
|
||||||
|
if (!failure) {
|
||||||
|
try {
|
||||||
|
currentPage.display(gfx);
|
||||||
|
} catch(e) {
|
||||||
|
failure = 'render: '+ e.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
currentTask.taskDone = (currentTask.pageNum == pdfDoc.numPages
|
||||||
|
&& (1 + currentTask.round) == currentTask.rounds);
|
||||||
|
sendTaskResult(canvas.toDataURL("image/png"));
|
||||||
|
log("done"+ (failure ? " (failed!)" : "") +"\n");
|
||||||
|
|
||||||
|
++currentTask.pageNum, nextPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
function done() {
|
function done() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user