ebml-helpers.test.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import QUnit from 'qunit';
  2. import formatFiles from 'create-test-data!formats';
  3. import parsingFiles from 'create-test-data!parsing';
  4. import {parseData} from '../src/ebml-helpers.js';
  5. import {doesCodecMatch, codecsFromFile} from './test-helpers.js';
  6. const files = [];
  7. // seperate files into modules by extension
  8. Object.keys(formatFiles).forEach((file) => {
  9. const extension = file.split('.').pop();
  10. if (extension === 'webm' || extension === 'mkv') {
  11. files.push(file);
  12. }
  13. });
  14. QUnit.module('parseData');
  15. files.forEach((file) => QUnit.test(`${file} can be parsed for tracks and blocks`, function(assert) {
  16. const {blocks, tracks} = parseData(formatFiles[file]());
  17. const codecs = codecsFromFile(file);
  18. assert.equal(tracks.length, Object.keys(codecs).length, 'tracks as expected');
  19. tracks.forEach(function(track) {
  20. assert.ok(doesCodecMatch(track.codec, codecs[track.type]), `${track.codec} is ${codecs[track.type]}`);
  21. });
  22. assert.ok(blocks.length, `has ${blocks.length} blocks`);
  23. assert.notOk(blocks.filter((b) => !b.frames.length).length, 'all blocks have frame data');
  24. }));
  25. QUnit.test('xiph and ebml lacing', function(assert) {
  26. const {blocks} = parseData(parsingFiles['xiph-ebml-lacing.mkv']());
  27. assert.ok(blocks.length, `has ${blocks.length} blocks`);
  28. assert.notOk(blocks.filter((b) => !b.frames.length).length, 'all blocks have frame data');
  29. assert.equal(blocks[1].lacing, 1, 'xiph lacing');
  30. assert.equal(blocks[2].lacing, 3, 'ebml lacing');
  31. });
  32. QUnit.test('fixed lacing', function(assert) {
  33. const {blocks} = parseData(parsingFiles['fixed-lacing.mkv']());
  34. assert.ok(blocks.length, `has ${blocks.length} blocks`);
  35. assert.notOk(blocks.filter((b) => !b.frames.length).length, 'all blocks have frame data');
  36. assert.equal(blocks[12].lacing, 2, 'fixed lacing');
  37. });
  38. QUnit.test('live data', function(assert) {
  39. const {blocks} = parseData(parsingFiles['live.mkv']());
  40. assert.ok(blocks.length, 6, 'has 6 blocks, even with "infinite" cluster dataSize');
  41. assert.notOk(blocks.filter((b) => !b.frames.length).length, 'all blocks have frame data');
  42. });