summaryrefslogtreecommitdiff
path: root/javascript/videojs/test/unit/tracks/track-list.test.js
blob: 88e1caf1cb3c6a1d6baf335db11a30ccc95e9dd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
/* eslint-env qunit */
import TrackList from '../../../src/js/tracks/track-list.js';
import EventTarget from '../../../src/js/event-target.js';

const newTrack = function(id) {
  return {
    id,
    addEventListener() {},
    off() {}
  };
};

QUnit.module('Track List', {
  beforeEach() {
    this.tracks = [newTrack('1'), newTrack('2'), newTrack('3')];
  }
});

QUnit.test('TrackList\'s length is set correctly', function(assert) {
  const trackList = new TrackList(this.tracks);

  assert.equal(trackList.length, this.tracks.length, 'length is ' + this.tracks.length);
});

QUnit.test('can get tracks by int and string id', function(assert) {
  const trackList = new TrackList(this.tracks);

  assert.equal(trackList.getTrackById('1').id, '1', 'id "1" has id of "1"');
  assert.equal(trackList.getTrackById('2').id, '2', 'id "2" has id of "2"');
  assert.equal(trackList.getTrackById('3').id, '3', 'id "3" has id of "3"');

});

QUnit.test('length is updated when new tracks are added or removed', function(assert) {
  const trackList = new TrackList(this.tracks);

  trackList.addTrack(newTrack('100'));
  assert.equal(
    trackList.length,
    this.tracks.length + 1,
    'the length is ' + (this.tracks.length + 1)
  );
  trackList.addTrack(newTrack('101'));
  assert.equal(
    trackList.length,
    this.tracks.length + 2,
    'the length is ' + (this.tracks.length + 2)
  );

  trackList.removeTrack(trackList.getTrackById('101'));
  assert.equal(
    trackList.length,
    this.tracks.length + 1,
    'the length is ' + (this.tracks.length + 1)
  );
  trackList.removeTrack(trackList.getTrackById('100'));
  assert.equal(
    trackList.length,
    this.tracks.length,
    'the length is ' + this.tracks.length
  );
});

QUnit.test('can access items by index', function(assert) {
  const trackList = new TrackList(this.tracks);
  const length = trackList.length;

  assert.expect(length);

  for (let i = 0; i < length; i++) {
    assert.equal(
      trackList[i].id,
      String(i + 1),
      'the id of a track matches the index + 1'
    );
  }
});

QUnit.test('can access new items by index', function(assert) {
  const trackList = new TrackList(this.tracks);

  trackList.addTrack(newTrack('100'));
  assert.equal(trackList[3].id, '100', 'id of item at index 3 is 100');

  trackList.addTrack(newTrack('101'));
  assert.equal(trackList[4].id, '101', 'id of item at index 4 is 101');
});

QUnit.test('cannot access removed items by index', function(assert) {
  const trackList = new TrackList(this.tracks);

  trackList.addTrack(newTrack('100'));
  trackList.addTrack(newTrack('101'));
  assert.equal(trackList[3].id, '100', 'id of item at index 3 is 100');
  assert.equal(trackList[4].id, '101', 'id of item at index 4 is 101');

  trackList.removeTrack(trackList.getTrackById('101'));
  trackList.removeTrack(trackList.getTrackById('100'));

  assert.ok(!trackList[3], 'nothing at index 3');
  assert.ok(!trackList[4], 'nothing at index 4');
});

QUnit.test('new item available at old index', function(assert) {
  const trackList = new TrackList(this.tracks);

  trackList.addTrack(newTrack('100'));
  assert.equal(trackList[3].id, '100', 'id of item at index 3 is 100');

  trackList.removeTrack(trackList.getTrackById('100'));
  assert.ok(!trackList[3], 'nothing at index 3');

  trackList.addTrack(newTrack('101'));
  assert.equal(trackList[3].id, '101', 'id of new item at index 3 is now 101');
});

QUnit.test('a "addtrack" event is triggered when new tracks are added', function(assert) {
  const trackList = new TrackList(this.tracks);
  let tracks = 0;
  let adds = 0;
  const addHandler = (e) => {
    if (e.track) {
      tracks++;
    }
    adds++;
  };

  trackList.on('addtrack', addHandler);

  trackList.addTrack(newTrack('100'));
  trackList.addTrack(newTrack('101'));

  trackList.off('addtrack', addHandler);
  trackList.onaddtrack = addHandler;

  trackList.addTrack(newTrack('102'));
  trackList.addTrack(newTrack('103'));

  assert.equal(adds, 4, 'we got ' + adds + ' "addtrack" events');
  assert.equal(tracks, 4, 'we got a track with every event');
});

QUnit.test('a "removetrack" event is triggered when tracks are removed', function(assert) {
  const trackList = new TrackList(this.tracks);
  let tracks = 0;
  let rms = 0;
  const rmHandler = (e) => {
    if (e.track) {
      tracks++;
    }
    rms++;
  };

  trackList.on('removetrack', rmHandler);
  trackList.removeTrack(trackList.getTrackById('1'));
  trackList.removeTrack(trackList.getTrackById('2'));

  trackList.off('removetrack', rmHandler);
  trackList.onremovetrack = rmHandler;
  trackList.removeTrack(trackList.getTrackById('3'));

  assert.equal(rms, 3, 'we got ' + rms + ' "removetrack" events');
  assert.equal(tracks, 3, 'we got a track with every event');
});

QUnit.test('labelchange event is fired for the list when a child track fires labelchange', function(assert) {
  const trackList = new TrackList([new EventTarget()]);
  let labelchanges = 0;
  const labelchangeHandler = (e) => {
    labelchanges++;
  };

  trackList.on('labelchange', labelchangeHandler);
  trackList[0].trigger('labelchange');
  assert.equal(labelchanges, '1', 'labelchange event is fired on tracklist');
});