video.test.js 7.7 KB
Newer Older
1
jest.setTimeout(60000);
2
describe('component-native-video', () => {
3 4 5 6 7 8 9
  if(process.env.uniTestPlatformInfo.startsWith('web')){
    // TODO: web 端暂不支持测试
    it('web', async () => {
      expect(1).toBe(1)
    })
    return
  }
10
  let page;
11
  let start = 0;
12
  beforeAll(async () => {
DCloud-yinjiacheng's avatar
DCloud-yinjiacheng 已提交
13
    page = await program.reLaunch('/pages/component/video/video');
14 15 16 17 18
    if(process.env.uniTestPlatformInfo.startsWith('web')){
      await page.setData({
        muted: true
      });
    }
19
    await page.waitFor(1000);
20 21 22
  });

  it('test API', async () => {
23
    expect(await page.data('isError')).toBe(false);
24 25
    // play
    await page.callMethod('play');
26 27
    await page.waitFor(100);
    expect(await page.data('isPlaying')).toBe(true);
28 29
    // pause
    await page.callMethod('pause');
30 31
    await page.waitFor(100);
    expect(await page.data('isPause')).toBe(true);
32 33
  });

34
  it('test local source', async () => {
35 36 37 38
    await page.setData({
      autoTest: true,
      isError: false
    });
39
    const oldSrc = await page.data('src');
40 41 42 43
    await page.callMethod('downloadSource');
    await page.waitFor(5000);
    expect(await page.data('isError')).toBe(false);
    await page.setData({
44
      src: '/static/test-video/2minute-demo.m3u8'
45 46 47
    });
    await page.waitFor(100);
    expect(await page.data('isError')).toBe(false);
48 49 50 51 52 53 54 55 56 57 58 59 60 61
    await page.setData({
      src: oldSrc
    });
  });

  it('test assets path', async () => {
    if (process.env.uniTestPlatformInfo.toLowerCase().startsWith('ios')) return;
    const oldSrc = await page.data('src');
    await page.setData({
      isError: false,
      src: 'file:///android_asset/uni-autoTest/demo10s.mp4'
    });
    await page.waitFor(500);
    expect(await page.data('isError')).toBe(false);
62
    await page.setData({
63
      src: oldSrc
64 65 66
    });
  });

67
  it('test event play pause controlstoggle', async () => {
68
    await page.callMethod('play');
69 70 71 72
    start = Date.now();
    await page.waitFor(async () => {
      return (await page.data('eventPlay')) || (Date.now() - start > 500);
    });
lizhongyi_'s avatar
lizhongyi_ 已提交
73
    if (process.env.uniTestPlatformInfo.toLowerCase().startsWith('ios')) {
74 75 76
      // expect(await page.data('eventPlay')).toEqual({
      //   type: 'play'
      // });
lizhongyi_'s avatar
lizhongyi_ 已提交
77 78 79 80 81 82
    }else {
      expect(await page.data('eventPlay')).toEqual({
        tagName: 'VIDEO',
        type: 'play'
      });
    }
83
    await page.callMethod('pause');
84 85 86 87
    start = Date.now();
    await page.waitFor(async () => {
      return (await page.data('eventPause')) || (Date.now() - start > 500);
    });
lizhongyi_'s avatar
lizhongyi_ 已提交
88
    if (process.env.uniTestPlatformInfo.toLowerCase().startsWith('ios')) {
89 90 91
      // expect(await page.data('eventPause')).toEqual({
      //   type: 'pause'
      // });
lizhongyi_'s avatar
lizhongyi_ 已提交
92 93 94 95 96 97
    }else {
       expect(await page.data('eventPause')).toEqual({
         tagName: 'VIDEO',
         type: 'pause'
       });
    }
98
    await page.callMethod('play');
99 100 101 102
    start = Date.now();
    await page.waitFor(async () => {
      return (await page.data('eventControlstoggle')) || (Date.now() - start > 500);
    });
103 104 105 106 107 108 109 110 111 112 113 114 115 116
    if (process.env.uniTestPlatformInfo.toLowerCase().startsWith('ios')) {
      // expect(await page.data('eventControlstoggle')).toEqual({
      //   tagName: 'VIDEO',
      //   type: 'controlstoggle',
      //   show: true
      // });
    }else {
      expect(await page.data('eventControlstoggle')).toEqual({
        tagName: 'VIDEO',
        type: 'controlstoggle',
        show: true
      });
    }

117 118
  });

119
  it('test event waiting progress', async () => {
lizhongyi_'s avatar
lizhongyi_ 已提交
120 121 122
    if (process.env.uniTestPlatformInfo.toLowerCase().startsWith('ios')) {
      return
    }
123
    await page.callMethod('seek', 10);
124 125 126 127
    start = Date.now();
    await page.waitFor(async () => {
      return (await page.data('eventWaiting')) && (await page.data('eventProgress')) || (Date.now() - start > 1000);
    });
128 129 130 131 132 133 134
    expect(await page.data('eventWaiting')).toEqual({
      tagName: 'VIDEO',
      type: 'waiting'
    });
    expect(await page.data('eventProgress')).toEqual({
      tagName: 'VIDEO',
      type: 'progress',
135
      isBufferedValid: true
136 137 138
    });
  });

139
  it('test event fullscreenchange fullscreenclick', async () => {
140
    if (process.env.uniTestPlatformInfo.toLowerCase().startsWith('ios')) {
141 142
      return;
    }
143
    await page.callMethod('requestFullScreen');
144 145 146 147
    start = Date.now();
    await page.waitFor(async () => {
      return (await page.data('eventFullscreenchange')) || (Date.now() - start > 1000);
    });
148 149 150 151 152 153
    expect(await page.data('eventFullscreenchange')).toEqual({
      tagName: 'VIDEO',
      type: 'fullscreenchange',
      fullScreen: true,
      direction: 'horizontal'
    });
154 155
    const infos = process.env.uniTestPlatformInfo.split(' ');
    const version = parseInt(infos[infos.length - 1]);
156
    if (process.env.uniTestPlatformInfo.startsWith('android') && version > 5) { // android5.1模拟器全屏时会弹出系统提示框,无法响应adb tap命令
157 158
      await page.waitFor(5000);
      await program.adbCommand('input tap 10 10');
159 160
      start = Date.now();
      await page.waitFor(async () => {
161
        return (await page.data('eventFullscreenclick')) || (Date.now() - start > 1000);
162
      });
163 164 165 166 167
      const res = await program.adbCommand('wm size');
      const width = res.data.split(' ').at(-1).split('x')[0];
      const height = res.data.split(' ').at(-1).split('x')[1];
      const res2 = await program.adbCommand('wm density');
      const scale = res2.data.split(' ').at(-1) / 160;
168 169 170
      expect(await page.data('eventFullscreenclick')).toEqual({
        tagName: 'VIDEO',
        type: 'fullscreenclick',
171 172
        screenX: parseInt(10 / scale),
        screenY: parseInt(10 / scale),
173 174 175 176 177 178 179
        screenWidth: parseInt(height / scale),
        screenHeight: parseInt(width / scale)
      });
    }
    await page.callMethod('exitFullScreen');
  });

180
  it('test event ended timeupdate', async () => {
lizhongyi_'s avatar
lizhongyi_ 已提交
181 182 183
    if (process.env.uniTestPlatformInfo.toLowerCase().startsWith('ios')) {
      return
    }
184
    await page.callMethod('seek', 120);
185 186
    start = Date.now();
    await page.waitFor(async () => {
187
      return (await page.data('eventEnded')) || (Date.now() - start > 30000);
188
    });
189 190 191 192
    expect(await page.data('eventEnded')).toEqual({
      tagName: 'VIDEO',
      type: 'ended'
    });
193 194 195 196 197 198 199 200 201 202 203 204 205 206
    const infos = process.env.uniTestPlatformInfo.split(' ');
    const version = parseInt(infos[infos.length - 1]);
    if (process.env.uniTestPlatformInfo.startsWith('android') && version > 5) {
      start = Date.now();
      await page.waitFor(async () => {
        return (await page.data('eventTimeupdate')) || (Date.now() - start > 500);
      });
      expect(await page.data('eventTimeupdate')).toEqual({
        tagName: 'VIDEO',
        type: 'timeupdate',
        currentTime: 121,
        duration: 121
      });
    }
207 208 209
  });

  it('test event error', async () => {
lizhongyi_'s avatar
lizhongyi_ 已提交
210 211 212
    if (process.env.uniTestPlatformInfo.toLowerCase().startsWith('ios')) {
      return
    }
213 214 215 216
    const oldSrc = await page.data('src');
    await page.setData({
      src: 'invalid url'
    });
217 218 219 220
    start = Date.now();
    await page.waitFor(async () => {
      return (await page.data('eventError')) || (Date.now() - start > 1000);
    });
221 222 223 224 225 226 227 228 229
    expect(await page.data('eventError')).toEqual({
      tagName: 'VIDEO',
      type: 'error',
      errCode: 300001
    });
    await page.setData({
      autoTest: false,
      src: oldSrc
    });
230 231
  });

232 233 234 235 236 237 238 239 240 241
  it('test sub component', async () => {
    if (process.env.uniTestPlatformInfo.toLowerCase().startsWith('ios')) return
    await page.setData({
      subCompEnable: true,
      subCompShow: true
    });
    await page.waitFor(100);
    expect(await page.callMethod('hasSubComponent')).toBe(true);
  });

242
  it('test format', async () => {
243
    page = await program.navigateTo('/pages/component/video/video-format');
244
    await page.waitFor(1000);
245
    expect((await page.data('isError')).value).toBe(false);
246 247
  });
});