gecko/content/media/test/test_metadata.html
Ralph Giles 7c7395ec0b Bug 789617 - Test vorbis comment validation. r=cpearce
Add a new test file with some invalid comments and verify
they are filtered out of the mozGetMetadata() output.
The new file includes the following valid edge cases:

 - empty tag name
 - empty tag value
 - punctuation in the tag name

and the following invalid cases:

 - non-ascii tag name
 - invalid characters in tag name
 - non-utf-8 tag value
 - no tag=value separator

Also updates the mochitest messages to be less confusing.
2012-09-10 15:39:23 -07:00

80 lines
2.3 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Test returning metadata from media files with mozGetMetadata()</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<script type="text/javascript" src="manifest.js"></script>
</head>
<body>
<pre id="test">
<div id="output"></div>
<script class="testbody" type="text/javascript">
var manager = new MediaTestManager;
function startTest(test, token) {
var a = document.createElement('audio');
a.token = token;
manager.started(token);
a.src = test.name;
a.name = test.name;
// Tags should not be available immediately.
var exception_fired = false;
try {
var m = a.mozGetMetadata();
} catch (e) {
is(e.name, 'InvalidStateError',
"early mozGetMetadata() should throw InvalidStateError");
exception_fired = true;
}
ok(exception_fired,
"mozGetMetadata() should throw an exception before HAVE_METADATA");
// Wait until metadata has loaded.
a.addEventListener('loadedmetadata', function() {
// read decoded tags
tags = a.mozGetMetadata();
ok(tags, "mozGetMetadata() should return a truthy value");
// Dump them out.
var d = document.getElementById('output');
var html = '<table>\n';
html += '<caption><p>Called getMozMetadata()'
html += ' on '+test.name+'</p></caption>\n';
html += '<tr><th>tag</th>';
html += '<th>decoded value</th><th>expected value</th></tr>\n';
for (tag in tags) {
html += '<tr><td>'+tag+'</td>';
html += '<td>'+tags[tag]+'</td>';
html += '<td>'+test.tags[tag]+'</td>';
html += '</tr>\n';
}
if (!Object.keys(tags).length) {
html += '<tr><td colspan=3 align=center><em>no tags</em></td></tr>\n';
}
html += '</table>\n';
var div = document.createElement('div');
div.innerHTML = html;
d.appendChild(div);
// Verify decoded tag values.
for (tag in tags) {
is(tags[tag], test.tags[tag], "Tag '"+tag+"' should match");
}
// Verify expected tag values
for (tag in test.tags) {
is(tags[tag], test.tags[tag], "Tag '"+tag+"' should match");
}
manager.finished(token);
}, false);
}
manager.runTests(gMetadataTests, startTest);
</script>
</pre>
</body>
</html>