quality-level-list.test.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import QUnit from 'qunit';
  2. import QualityLevelList from '../src/quality-level-list';
  3. import { representations } from './test-helpers';
  4. QUnit.module('QualityLevelList', {
  5. beforeEach() {
  6. this.qualityLevels = new QualityLevelList();
  7. this.levels = representations;
  8. }
  9. });
  10. QUnit.test('the QualityLevelList is iterable', function(assert) {
  11. assert.ok(Symbol.iterator in this.qualityLevels, 'is iterable');
  12. });
  13. QUnit.test('Properly adds QualityLevels to the QualityLevelList', function(assert) {
  14. let addCount = 0;
  15. this.qualityLevels.on('addqualitylevel', (event) => {
  16. addCount++;
  17. });
  18. const expected0 = this.qualityLevels.addQualityLevel(this.levels[0]);
  19. assert.equal(this.qualityLevels.length, 1, 'added quality level');
  20. assert.equal(addCount, 1, 'emmitted addqualitylevel event');
  21. assert.strictEqual(this.qualityLevels[0], expected0, 'can access quality level with index');
  22. const expected1 = this.qualityLevels.addQualityLevel(this.levels[1]);
  23. assert.equal(this.qualityLevels.length, 2, 'added quality level');
  24. assert.equal(addCount, 2, 'emmitted addqualitylevel event');
  25. assert.strictEqual(this.qualityLevels[1], expected1, 'can access quality level with index');
  26. const expectedDuplicate = this.qualityLevels.addQualityLevel(this.levels[0]);
  27. assert.equal(this.qualityLevels.length, 2, 'does not add duplicate quality level');
  28. assert.equal(addCount, 2, 'no event emitted on dulicate');
  29. assert.strictEqual(this.qualityLevels[3], undefined, 'no index property defined');
  30. assert.strictEqual(this.qualityLevels[0], expected0, 'quality level unchanged');
  31. assert.strictEqual(this.qualityLevels[0], expectedDuplicate, 'adding duplicate returns same reference');
  32. assert.strictEqual(this.qualityLevels[1], expected1, 'quality level unchanged');
  33. });
  34. QUnit.test('Properly removes QualityLevels from the QualityLevelList', function(assert) {
  35. let removeCount = 0;
  36. const expected = [];
  37. this.levels.forEach((qualityLevel) => {
  38. expected.push(this.qualityLevels.addQualityLevel(qualityLevel));
  39. });
  40. this.qualityLevels.on('removequalitylevel', (event) => {
  41. removeCount++;
  42. });
  43. // Mock an initial selected quality level
  44. this.qualityLevels.selectedIndex_ = 2;
  45. assert.equal(this.qualityLevels.length, 4, '4 initial quality levels');
  46. let removed = this.qualityLevels.removeQualityLevel(expected[3]);
  47. assert.equal(this.qualityLevels.length, 3, 'removed quality level');
  48. assert.equal(removeCount, 1, 'emitted removequalitylevel event');
  49. assert.strictEqual(removed, expected[3], 'returned removed level');
  50. assert.notStrictEqual(this.qualityLevels[3], expected[3], 'nothing at index');
  51. removed = this.qualityLevels.removeQualityLevel(expected[1]);
  52. assert.equal(this.qualityLevels.length, 2, 'removed quality level');
  53. assert.equal(removeCount, 2, 'emitted removequalitylevel event');
  54. assert.strictEqual(removed, expected[1], 'returned removed level');
  55. assert.notStrictEqual(this.qualityLevels[1], expected[1], 'quality level not at index');
  56. assert.strictEqual(
  57. this.qualityLevels[this.qualityLevels.selectedIndex],
  58. expected[2],
  59. 'selected index properly adjusted on quality level removal'
  60. );
  61. removed = this.qualityLevels.removeQualityLevel(expected[3]);
  62. assert.equal(this.qualityLevels.length, 2, 'no quality level removed if not found');
  63. assert.equal(removed, null, 'returned null when nothing removed');
  64. assert.equal(removeCount, 2, 'no event emitted when quality level not found');
  65. removed = this.qualityLevels.removeQualityLevel(expected[2]);
  66. assert.equal(this.qualityLevels.length, 1, 'quality level removed');
  67. assert.equal(removeCount, 3, 'emitted removequalitylevel event');
  68. assert.strictEqual(removed, expected[2], 'returned removed level');
  69. assert.equal(this.qualityLevels.selectedIndex, -1, 'selectedIndex set to -1 when removing selected quality level');
  70. });
  71. QUnit.test('can get quality level by id', function(assert) {
  72. const expected = [];
  73. this.levels.forEach((qualityLevel) => {
  74. expected.push(this.qualityLevels.addQualityLevel(qualityLevel));
  75. });
  76. assert.strictEqual(
  77. this.qualityLevels.getQualityLevelById('0'),
  78. expected[0],
  79. 'found quality level with id "0"'
  80. );
  81. assert.strictEqual(
  82. this.qualityLevels.getQualityLevelById('1'),
  83. expected[1],
  84. 'found quality level with id "1"'
  85. );
  86. assert.strictEqual(
  87. this.qualityLevels.getQualityLevelById('2'),
  88. expected[2],
  89. 'found quality level with id "2"'
  90. );
  91. assert.strictEqual(
  92. this.qualityLevels.getQualityLevelById('3'),
  93. expected[3],
  94. 'found quality level with id "3"'
  95. );
  96. assert.strictEqual(
  97. this.qualityLevels.getQualityLevelById('4'),
  98. null,
  99. 'no quality level with id "4" found'
  100. );
  101. });