utils.test.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. import { merge, values } from '../src/utils/object';
  2. import { parseDuration } from '../src/utils/time';
  3. import {
  4. flatten,
  5. range,
  6. from,
  7. findIndexes
  8. } from '../src/utils/list';
  9. import { findChildren, getContent } from '../src/utils/xml';
  10. import {DOMParser} from '@xmldom/xmldom';
  11. import {JSDOM} from 'jsdom';
  12. import QUnit from 'qunit';
  13. const document = new JSDOM().window.document;
  14. QUnit.module('utils');
  15. QUnit.module('merge');
  16. QUnit.test('empty', function(assert) {
  17. assert.deepEqual(merge({}, { a: 1 }), { a: 1 });
  18. assert.deepEqual(merge({ a: 1 }, { a: 1 }), { a: 1 });
  19. assert.deepEqual(merge({ a: 1 }, {}), { a: 1 });
  20. });
  21. QUnit.test('append', function(assert) {
  22. assert.deepEqual(merge({ a: 1 }, { b: 3 }), { a: 1, b: 3 });
  23. });
  24. QUnit.test('overwrite', function(assert) {
  25. assert.deepEqual(merge({ a: 1 }, { a: 2 }), { a: 2 });
  26. });
  27. QUnit.test('empty', function(assert) {
  28. assert.deepEqual(merge({}, {}), {});
  29. assert.deepEqual(merge({}, 1), {});
  30. assert.deepEqual(merge(1, {}), {});
  31. });
  32. QUnit.test('Test for checking the merge when multiple segment Information are present', function(assert) {
  33. const adaptationSetInfo = {
  34. base: { duration: '10'}
  35. };
  36. const representationInfo = {
  37. base: { duration: '25', indexRange: '230-252'}
  38. };
  39. const expected = {
  40. base: { duration: '25', indexRange: '230-252'}
  41. };
  42. assert.deepEqual(
  43. merge(adaptationSetInfo, representationInfo), expected,
  44. 'Merged SegmentBase info'
  45. );
  46. });
  47. QUnit.test('Test for checking the merge when segment Information is present at a level and is undefined at another', function(assert) {
  48. const periodInfo = {
  49. base: {
  50. initialization: {
  51. range: '0-8888'
  52. }
  53. }
  54. };
  55. const adaptationSetInfo = {
  56. base: { duration: '10', indexRange: '230-252'}
  57. };
  58. const representationInfo = {};
  59. const expected = {
  60. base: { duration: '10', indexRange: '230-252', initialization: {range: '0-8888'}}
  61. };
  62. assert.deepEqual(
  63. merge(periodInfo, adaptationSetInfo, representationInfo), expected,
  64. 'Merged SegmentBase info'
  65. );
  66. });
  67. QUnit.module('values');
  68. QUnit.test('empty', function(assert) {
  69. assert.deepEqual(values({}), []);
  70. });
  71. QUnit.test('mixed', function(assert) {
  72. assert.deepEqual(values({ a: 1, b: true, c: 'foo'}), [1, true, 'foo']);
  73. });
  74. QUnit.module('flatten');
  75. QUnit.test('empty', function(assert) {
  76. assert.deepEqual(flatten([]), []);
  77. });
  78. QUnit.test('one item', function(assert) {
  79. assert.deepEqual(flatten([[1]]), [1]);
  80. });
  81. QUnit.test('multiple items', function(assert) {
  82. assert.deepEqual(flatten([[1], [2], [3]]), [1, 2, 3]);
  83. });
  84. QUnit.test('multiple multiple items', function(assert) {
  85. assert.deepEqual(flatten([[1], [2, 3], [4]]), [1, 2, 3, 4]);
  86. });
  87. QUnit.test('nested nests', function(assert) {
  88. assert.deepEqual(flatten([[1], [[2]]]), [1, [2]]);
  89. });
  90. QUnit.test('not a list of lists', function(assert) {
  91. assert.deepEqual(flatten([1, 2]), [1, 2]);
  92. assert.deepEqual(flatten([[1], 2]), [1, 2]);
  93. });
  94. QUnit.module('parseDuration');
  95. QUnit.test('full date', function(assert) {
  96. assert.deepEqual(parseDuration('P10Y10M10DT10H10M10.1S'), 342180610.1);
  97. });
  98. QUnit.test('time only', function(assert) {
  99. assert.deepEqual(parseDuration('PT10H10M10.1S'), 36610.1);
  100. });
  101. QUnit.test('empty', function(assert) {
  102. assert.deepEqual(parseDuration(''), 0);
  103. });
  104. QUnit.test('invalid', function(assert) {
  105. assert.deepEqual(parseDuration('foo'), 0);
  106. });
  107. QUnit.module('range');
  108. QUnit.test('simple', function(assert) {
  109. assert.deepEqual(range(1, 4), [1, 2, 3]);
  110. });
  111. QUnit.test('single number range', function(assert) {
  112. assert.deepEqual(range(1, 1), []);
  113. });
  114. QUnit.test('negative', function(assert) {
  115. assert.deepEqual(range(-1, 2), [-1, 0, 1]);
  116. });
  117. QUnit.module('from');
  118. QUnit.test('simple array', function(assert) {
  119. assert.deepEqual(from([1]), [1]);
  120. });
  121. QUnit.test('empty array', function(assert) {
  122. assert.deepEqual(from([]), []);
  123. });
  124. QUnit.test('non-array', function(assert) {
  125. assert.deepEqual(from(1), []);
  126. });
  127. QUnit.test('array-like', function(assert) {
  128. const fixture = document.createElement('div');
  129. fixture.innerHTML = '<div></div><div></div>';
  130. const result = from(fixture.getElementsByTagName('div'));
  131. assert.ok(result.map);
  132. assert.deepEqual(result.length, 2);
  133. });
  134. QUnit.module('findIndexes');
  135. QUnit.test('index not found', function(assert) {
  136. assert.deepEqual(findIndexes([], 'a'), []);
  137. assert.deepEqual(findIndexes([], ''), []);
  138. assert.deepEqual(findIndexes([{ a: true}], 'b'), []);
  139. });
  140. QUnit.test('indexes found', function(assert) {
  141. assert.deepEqual(findIndexes([{ a: true}], 'a'), [0]);
  142. assert.deepEqual(findIndexes([
  143. { a: true },
  144. { b: true },
  145. { b: true, c: true }
  146. ], 'b'), [1, 2]);
  147. });
  148. QUnit.module('xml', {
  149. beforeEach() {
  150. const parser = new DOMParser();
  151. const xmlString = `
  152. <fix>
  153. <test>foo </test>
  154. <div>bar</div>
  155. <div>baz</div>
  156. </fix>`;
  157. this.fixture = parser.parseFromString(xmlString, 'text/xml').documentElement;
  158. }
  159. });
  160. QUnit.test('findChildren', function(assert) {
  161. assert.deepEqual(findChildren(this.fixture, 'test').length, 1, 'single');
  162. assert.deepEqual(findChildren(this.fixture, 'div').length, 2, 'multiple');
  163. assert.deepEqual(findChildren(this.fixture, 'el').length, 0, 'none');
  164. });
  165. QUnit.test('getContent', function(assert) {
  166. const result = findChildren(this.fixture, 'test')[0];
  167. assert.deepEqual(getContent(result), 'foo', 'gets text and trims');
  168. });