Skip to content
This repository was archived by the owner on Mar 19, 2021. It is now read-only.

Commit afd909b

Browse files
committed
Add tests for mediacapture-image
Cover following checkpoints: - throw TypeError when ImageCapture parameter is not mediaStramTrack - ImageCapture track attribute is readonly - getPhotoCapabilities() of an ended Track should throw InvalidStateError - getPhotoSettings() of an ended Track should throw InvalidStateError - takePhoto() of an ended Track should throw InvalidStateError - the parameter of takePhoto() is nullable
1 parent a0fb7d2 commit afd909b

5 files changed

+115
-0
lines changed

mediacapture-image/ImageCapture-creation.https.html

+19
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,23 @@
7373
this.unreached_func('Error creating MediaStream.'));
7474
}, 'verifies that an ImageCapture cannot be created out of an Audio Track');
7575

76+
var testParameter = test(function() {
77+
const invalidParameters = [
78+
"invalid",
79+
null,
80+
123,
81+
{},
82+
"",
83+
true
84+
];
85+
assert_throws(new TypeError(),
86+
function() { var capturer = new ImageCapture(); },
87+
'an ImageCapturer can not be created with no parameter');
88+
invalidParameters.map(parameter => {
89+
assert_throws(new TypeError(),
90+
function() { var capturer = new ImageCapture(parameter); },
91+
`an ImageCapturer can not be created with a ${parameter} parameter`);
92+
});
93+
}, 'throw "TypeError" if parameter is not MediaStreamTrack.');
94+
7695
</script>
+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<!DOCTYPE html>
2+
<meta charset="utf-8">
3+
<title>ImageCapture track</title>
4+
<link rel="author" title="Intel" href="http://www.intel.com">
5+
<link rel="help" href="https://w3c.github.io/mediacapture-image/#dom-imagecapture-track">
6+
<script src="/resources/testharness.js"></script>
7+
<script src="/resources/testharnessreport.js"></script>
8+
<canvas id='canvas' width=10 height=10></canvas>
9+
<script>
10+
11+
test(t => {
12+
let canvas = document.getElementById('canvas');
13+
let context = canvas.getContext('2d');
14+
context.fillStyle = 'red';
15+
context.fillRect(0, 0, 10, 10);
16+
17+
let stream = canvas.captureStream();
18+
let videoTrack = stream.getVideoTracks()[0];
19+
assert_equals(videoTrack.readyState, "live");
20+
assert_true(videoTrack.enabled);
21+
22+
let capturer = new ImageCapture(videoTrack);
23+
assert_true(capturer.track instanceof MediaStreamTrack);
24+
assert_equals(capturer.track, videoTrack);
25+
26+
capturer.track.enabled = false;
27+
assert_true(videoTrack.enabled, "track enabled");
28+
capturer.track.stop();
29+
assert_equals(videoTrack.readyState, "live", "track readyState");
30+
}, "ImageCapture track attribute is readonly")
31+
32+
</script>

mediacapture-image/getPhotoCapabilities.html

+16
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,20 @@
4242

4343
}, 'exercises ImageCapture.getPhotoCapabilities()');
4444

45+
promise_test(t => {
46+
let canvas = document.getElementById('canvas');
47+
let context = canvas.getContext('2d');
48+
context.fillStyle = 'red';
49+
context.fillRect(0, 0, 10, 10);
50+
let stream = canvas.captureStream();
51+
let videoTrack = stream.getVideoTracks()[0];
52+
videoTrack.stop();
53+
54+
let capturer = new ImageCapture(videoTrack);
55+
assert_equals(videoTrack.readyState, 'ended');
56+
57+
return promise_rejects(t, 'InvalidStateError', capturer.getPhotoCapabilities())
58+
59+
}, 'getPhotoCapabilities() of an ended Track should throw "InvalidStateError"');
60+
4561
</script>

mediacapture-image/getPhotoSettings.html

+16
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,20 @@
2727

2828
}, 'exercises ImageCapture.getPhotoSettings()');
2929

30+
promise_test(t => {
31+
let canvas = document.getElementById('canvas');
32+
let context = canvas.getContext('2d');
33+
context.fillStyle = 'red';
34+
context.fillRect(0, 0, 10, 10);
35+
let stream = canvas.captureStream();
36+
let videoTrack = stream.getVideoTracks()[0];
37+
videoTrack.stop();
38+
39+
let capturer = new ImageCapture(videoTrack);
40+
assert_equals(videoTrack.readyState, 'ended');
41+
42+
return promise_rejects(t, 'InvalidStateError', capturer.getPhotoSettings())
43+
44+
}, 'getPhotoSettings() of an ended Track should throw "InvalidStateError"');
45+
3046
</script>

mediacapture-image/takePhoto.html

+32
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,36 @@
2626

2727
}, 'exercises ImageCapture.takePhoto()');
2828

29+
image_capture_test(async t => {
30+
let canvas = document.getElementById('canvas');
31+
let context = canvas.getContext('2d');
32+
context.fillStyle = 'red';
33+
context.fillRect(0, 0, 10, 10);
34+
let stream = canvas.captureStream();
35+
36+
let capturer = new ImageCapture(stream.getVideoTracks()[0]);
37+
let blob = await capturer.takePhoto(null);
38+
39+
// JS Blob is almost-opaque, can only check |type| and |size|.
40+
assert_equals(blob.type, 'image/cat');
41+
assert_equals(blob.size, 2);
42+
43+
}, 'exercises ImageCapture.takePhoto(null)');
44+
45+
promise_test(t => {
46+
let canvas = document.getElementById('canvas');
47+
let context = canvas.getContext('2d');
48+
context.fillStyle = 'red';
49+
context.fillRect(0, 0, 10, 10);
50+
let stream = canvas.captureStream();
51+
let videoTrack = stream.getVideoTracks()[0];
52+
videoTrack.stop();
53+
54+
let capturer = new ImageCapture(videoTrack);
55+
assert_equals(videoTrack.readyState, 'ended');
56+
57+
return promise_rejects(t, 'InvalidStateError', capturer.takePhoto())
58+
59+
}, 'takePhoto() of an ended Track should throw "InvalidStateError"');
60+
2961
</script>

0 commit comments

Comments
 (0)