зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1016413 - Tests for fmp4 metadata backend. r=rillian
The reporting of metadata with fmp4 backend is tested here with the file gizmo.metadata.mp4, and some changes are made on test_metadata.html to integrate tests on mp4 files with restriction to certain platforms. A 'type' field has also been added to gMetadataTests' elements in manifest.js in order to correctly test the type with canPlayType method for instance.
This commit is contained in:
Родитель
f09bb3e0fc
Коммит
54fa326eb6
Двоичный файл не отображается.
|
@ -486,7 +486,9 @@ var gAspectRatioTests = [
|
|||
// Used by test_metadata.html.
|
||||
var gMetadataTests = [
|
||||
// Ogg Vorbis files
|
||||
{ name:"short-video.ogv", tags: {
|
||||
{ name:"short-video.ogv",
|
||||
type:"video/ogg",
|
||||
tags: {
|
||||
TITLE:"Lepidoptera",
|
||||
ARTIST:"Epoq",
|
||||
ALBUM:"Kahvi Collective",
|
||||
|
@ -494,7 +496,9 @@ var gMetadataTests = [
|
|||
COMMENT:"http://www.kahvi.org",
|
||||
}
|
||||
},
|
||||
{ name:"bug516323.ogv", tags: {
|
||||
{ name:"bug516323.ogv",
|
||||
type:"video/ogg",
|
||||
tags: {
|
||||
GENRE:"Open Movie",
|
||||
ENCODER:"Audacity",
|
||||
TITLE:"Elephants Dream",
|
||||
|
@ -502,7 +506,9 @@ var gMetadataTests = [
|
|||
COMMENTS:"Audio Description"
|
||||
}
|
||||
},
|
||||
{ name:"bug516323.indexed.ogv", tags: {
|
||||
{ name:"bug516323.indexed.ogv",
|
||||
type:"video/ogg",
|
||||
tags: {
|
||||
GENRE:"Open Movie",
|
||||
ENCODER:"Audacity",
|
||||
TITLE:"Elephants Dream",
|
||||
|
@ -510,17 +516,26 @@ var gMetadataTests = [
|
|||
COMMENTS:"Audio Description"
|
||||
}
|
||||
},
|
||||
{ name:"detodos.opus", tags: {
|
||||
{ name:"detodos.opus",
|
||||
type:"audio/ogg; codecs=opus",
|
||||
tags: {
|
||||
title:"De todos. Para todos.",
|
||||
artist:"Mozilla.org"
|
||||
}
|
||||
},
|
||||
{ name:"sound.ogg", tags: { } },
|
||||
{ name:"small-shot.ogg", tags: {
|
||||
{ name:"sound.ogg",
|
||||
type:"audio/ogg",
|
||||
tags: { }
|
||||
},
|
||||
{ name:"small-shot.ogg",
|
||||
type:"video/ogg",
|
||||
tags: {
|
||||
title:"Pew SFX"
|
||||
}
|
||||
},
|
||||
{ name:"badtags.ogg", tags: {
|
||||
{ name:"badtags.ogg",
|
||||
type:"audio/ogg",
|
||||
tags: {
|
||||
// We list only the valid tags here, and verify
|
||||
// the invalid ones are filtered out.
|
||||
title:"Invalid comments test file",
|
||||
|
@ -535,41 +550,70 @@ var gMetadataTests = [
|
|||
// "not-utf-8":"invalid sequences: \xff\xfe\xfa\xfb\0eol"
|
||||
}
|
||||
},
|
||||
{ name:"wave_metadata.wav", tags: {
|
||||
{ name:"wave_metadata.wav",
|
||||
type:"audio/x-wav",
|
||||
tags: {
|
||||
name:"Track Title",
|
||||
artist:"Artist Name",
|
||||
comments:"Comments",
|
||||
}
|
||||
},
|
||||
{ name:"wave_metadata_utf8.wav", tags: {
|
||||
{ name:"wave_metadata_utf8.wav",
|
||||
type:"audio/x-wav",
|
||||
tags: {
|
||||
name:"歌曲名稱",
|
||||
artist:"作曲者",
|
||||
comments:"註解",
|
||||
}
|
||||
},
|
||||
{ name:"wave_metadata_unknown_tag.wav", tags: {
|
||||
{ name:"wave_metadata_unknown_tag.wav",
|
||||
type:"audio/x-wav",
|
||||
tags: {
|
||||
name:"Track Title",
|
||||
comments:"Comments",
|
||||
}
|
||||
},
|
||||
{ name:"wave_metadata_bad_len.wav", tags: {
|
||||
{ name:"wave_metadata_bad_len.wav",
|
||||
type:"audio/x-wav",
|
||||
tags: {
|
||||
name:"Track Title",
|
||||
artist:"Artist Name",
|
||||
}
|
||||
},
|
||||
{ name:"wave_metadata_bad_no_null.wav", tags: {
|
||||
{ name:"wave_metadata_bad_no_null.wav",
|
||||
type:"audio/x-wav",
|
||||
tags: {
|
||||
name:"Track Title",
|
||||
artist:"Artist Name",
|
||||
comments:"Comments!!",
|
||||
}
|
||||
},
|
||||
{ name:"wave_metadata_bad_utf8.wav", tags: {
|
||||
{ name:"wave_metadata_bad_utf8.wav",
|
||||
type:"audio/x-wav",
|
||||
tags: {
|
||||
name:"歌曲名稱",
|
||||
comments:"註解",
|
||||
}
|
||||
},
|
||||
{ name:"wavedata_u8.wav", tags: { }
|
||||
{ name:"wavedata_u8.wav",
|
||||
type:"audio/x-wav",
|
||||
tags: { }
|
||||
},
|
||||
{ name:"gizmo.metadata.mp4",
|
||||
type:"video/mp4",
|
||||
tags: {
|
||||
artist:"Artist name",
|
||||
title:"Title name",
|
||||
album:"Album name",
|
||||
albumArtist:"Album Artist name",
|
||||
genre:"Genre name",
|
||||
date:"20140326T002053.000Z",
|
||||
year:"2014",
|
||||
writer:"Composer name",
|
||||
discNumber:"1/0",
|
||||
cdTrackNumber:"1/0"
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
function checkMetadata(msg, e, test) {
|
||||
|
|
|
@ -144,6 +144,7 @@ support-files =
|
|||
file_access_controls.html
|
||||
fragment_noplay.js
|
||||
fragment_play.js
|
||||
gizmo.metadata.mp4
|
||||
gizmo.mp4
|
||||
gizmo.mp4^headers^
|
||||
huge-id3.mp3
|
||||
|
|
|
@ -13,30 +13,34 @@
|
|||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var manager = new MediaTestManager;
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv({
|
||||
'set': [
|
||||
["media.fragmented-mp4.ffmpeg.enabled", true],
|
||||
["media.fragmented-mp4.exposed", true]
|
||||
]
|
||||
}, beginTest);
|
||||
|
||||
function startTest(test, token) {
|
||||
var a = document.createElement('audio');
|
||||
a.preload = "auto";
|
||||
a.token = token;
|
||||
manager.started(token);
|
||||
function isMP4(value) {
|
||||
return value === "mp4" || value === "x-m4a";
|
||||
}
|
||||
|
||||
a.src = test.name;
|
||||
a.name = test.name;
|
||||
// Returns true if mp4 metadata reporting shall not be tested on the current platform
|
||||
function MP4isNotTested() {
|
||||
return !(
|
||||
navigator.userAgent.indexOf("Linux") != -1 || // Linux
|
||||
navigator.userAgent.indexOf("Windows NT 6.1") != -1 || // Windows 7
|
||||
navigator.userAgent.indexOf("Windows NT 6.2") != -1 // Windows 8
|
||||
);
|
||||
}
|
||||
|
||||
// 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");
|
||||
function beginTest() {
|
||||
manager.runTests(gMetadataTests, startTest);
|
||||
}
|
||||
|
||||
// Wait until metadata has loaded.
|
||||
a.addEventListener('loadedmetadata', function() {
|
||||
function checkTags(event) {
|
||||
var a = event.target;
|
||||
var test = a.value;
|
||||
// read decoded tags
|
||||
tags = a.mozGetMetadata();
|
||||
ok(tags, "mozGetMetadata() should return a truthy value");
|
||||
|
@ -68,11 +72,41 @@ function startTest(test, token) {
|
|||
for (tag in test.tags) {
|
||||
is(tags[tag], test.tags[tag], "Tag '"+tag+"' should match");
|
||||
}
|
||||
manager.finished(token);
|
||||
}, false);
|
||||
manager.finished(a.token);
|
||||
|
||||
}
|
||||
|
||||
manager.runTests(gMetadataTests, startTest);
|
||||
function startTest(test, token) {
|
||||
|
||||
// Tests on MP4 are restricted to certain platforms
|
||||
var format = test.type.split('/')[1];
|
||||
if (isMP4(format) && MP4isNotTested()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var a = document.createElement(getMajorMimeType(test.type));
|
||||
a.preload = "auto";
|
||||
a.token = token;
|
||||
manager.started(token);
|
||||
a.src = test.name;
|
||||
a.name = test.name;
|
||||
a.value = test;
|
||||
|
||||
// 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', checkTags, false);
|
||||
}
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
|
Загрузка…
Ссылка в новой задаче