Skip to content

Commit 0ac5dc3

Browse files
bzbarskymoz-wptsync-bot
authored andcommitted
Fix validity checks in createPattern to follow the spec.
Differential Revision: https://phabricator.services.mozilla.com/D63409 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1614225 gecko-commit: aac4c06cc1cef17c5ad638fdd313801420fdd953 gecko-integration-branch: autoland gecko-reviewers: jrmuizel
1 parent a378af2 commit 0ac5dc3

10 files changed

+317
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<!DOCTYPE html>
2+
<!-- DO NOT EDIT! This test has been generated by /2dcontext/tools/gentest.py. -->
3+
<title>Canvas test: 2d.pattern.image.nonexistent-but-loading</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
<script src="/2dcontext/resources/canvas-tests.js"></script>
7+
<link rel="stylesheet" href="/2dcontext/resources/canvas-tests.css">
8+
<body class="show_output">
9+
10+
<h1>2d.pattern.image.nonexistent-but-loading</h1>
11+
<p class="desc"></p>
12+
13+
14+
<p class="output">Actual output:</p>
15+
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
16+
17+
<ul id="d"></ul>
18+
<script>
19+
var t = async_test("");
20+
_addTest(function(canvas, ctx) {
21+
22+
var img = document.createElement("img");
23+
img.src = "/images/no-such-image-really.png";
24+
_assertSame(ctx.createPattern(img, 'repeat'), null, "ctx.createPattern(img, 'repeat')", "null");
25+
var img = document.createElementNS("http://www.w3.org/2000/svg", "image");
26+
img.src = "/images/no-such-image-really.png";
27+
_assertSame(ctx.createPattern(img, 'repeat'), null, "ctx.createPattern(img, 'repeat')", "null");
28+
29+
30+
});
31+
</script>
32+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<!DOCTYPE html>
2+
<!-- DO NOT EDIT! This test has been generated by /2dcontext/tools/gentest.py. -->
3+
<title>Canvas test: 2d.pattern.image.nonexistent</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
<script src="/2dcontext/resources/canvas-tests.js"></script>
7+
<link rel="stylesheet" href="/2dcontext/resources/canvas-tests.css">
8+
<body class="show_output">
9+
10+
<h1>2d.pattern.image.nonexistent</h1>
11+
<p class="desc"></p>
12+
13+
14+
<p class="output">Actual output:</p>
15+
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
16+
17+
<ul id="d"></ul>
18+
<script>
19+
var t = async_test("");
20+
_addTest(function(canvas, ctx) {
21+
22+
var img = document.getElementById('no-such-image-really.png');
23+
assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(img, 'repeat'); });
24+
25+
26+
});
27+
</script>
28+
<img src="/images/no-such-image-really.png" id="no-such-image-really.png" class="resource">
29+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<!DOCTYPE html>
2+
<!-- DO NOT EDIT! This test has been generated by /2dcontext/tools/gentest.py. -->
3+
<title>Canvas test: 2d.pattern.image.nosrc</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
<script src="/2dcontext/resources/canvas-tests.js"></script>
7+
<link rel="stylesheet" href="/2dcontext/resources/canvas-tests.css">
8+
<body class="show_output">
9+
10+
<h1>2d.pattern.image.nosrc</h1>
11+
<p class="desc"></p>
12+
13+
14+
<p class="output">Actual output:</p>
15+
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
16+
17+
<ul id="d"></ul>
18+
<script>
19+
var t = async_test("");
20+
_addTest(function(canvas, ctx) {
21+
22+
var img = document.createElement("img");
23+
_assertSame(ctx.createPattern(img, 'repeat'), null, "ctx.createPattern(img, 'repeat')", "null");
24+
var img = document.createElementNS("http://www.w3.org/2000/svg", "image");
25+
_assertSame(ctx.createPattern(img, 'repeat'), null, "ctx.createPattern(img, 'repeat')", "null");
26+
27+
28+
});
29+
</script>
30+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<!DOCTYPE html>
2+
<!-- DO NOT EDIT! This test has been generated by /2dcontext/tools/gentest.py. -->
3+
<title>Canvas test: 2d.pattern.image.zeroheight</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
<script src="/2dcontext/resources/canvas-tests.js"></script>
7+
<link rel="stylesheet" href="/2dcontext/resources/canvas-tests.css">
8+
<body class="show_output">
9+
10+
<h1>2d.pattern.image.zeroheight</h1>
11+
<p class="desc"></p>
12+
13+
14+
<p class="output">Actual output:</p>
15+
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
16+
17+
<ul id="d"></ul>
18+
<script>
19+
var t = async_test("");
20+
_addTest(function(canvas, ctx) {
21+
22+
var img = document.getElementById('red-zeroheight.svg');
23+
_assertSame(ctx.createPattern(img, 'repeat'), null, "ctx.createPattern(img, 'repeat')", "null");
24+
25+
26+
});
27+
</script>
28+
<img src="/images/red-zeroheight.svg" id="red-zeroheight.svg" class="resource">
29+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<!DOCTYPE html>
2+
<!-- DO NOT EDIT! This test has been generated by /2dcontext/tools/gentest.py. -->
3+
<title>Canvas test: 2d.pattern.image.zerowidth</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
<script src="/2dcontext/resources/canvas-tests.js"></script>
7+
<link rel="stylesheet" href="/2dcontext/resources/canvas-tests.css">
8+
<body class="show_output">
9+
10+
<h1>2d.pattern.image.zerowidth</h1>
11+
<p class="desc"></p>
12+
13+
14+
<p class="output">Actual output:</p>
15+
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
16+
17+
<ul id="d"></ul>
18+
<script>
19+
var t = async_test("");
20+
_addTest(function(canvas, ctx) {
21+
22+
var img = document.getElementById('red-zerowidth.svg');
23+
_assertSame(ctx.createPattern(img, 'repeat'), null, "ctx.createPattern(img, 'repeat')", "null");
24+
25+
26+
});
27+
</script>
28+
<img src="/images/red-zerowidth.svg" id="red-zerowidth.svg" class="resource">
29+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<!DOCTYPE html>
2+
<!-- DO NOT EDIT! This test has been generated by /2dcontext/tools/gentest.py. -->
3+
<title>Canvas test: 2d.pattern.svgimage.nonexistent</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
<script src="/2dcontext/resources/canvas-tests.js"></script>
7+
<link rel="stylesheet" href="/2dcontext/resources/canvas-tests.css">
8+
<body class="show_output">
9+
10+
<h1>2d.pattern.svgimage.nonexistent</h1>
11+
<p class="desc"></p>
12+
13+
14+
<p class="output">Actual output:</p>
15+
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
16+
17+
<ul id="d"></ul>
18+
<script>
19+
var t = async_test("");
20+
_addTest(function(canvas, ctx) {
21+
22+
var img = document.getElementById('no-such-image-really.png');
23+
assert_throws_dom("INVALID_STATE_ERR", function() { ctx.createPattern(img, 'repeat'); });
24+
25+
26+
});
27+
</script>
28+
<svg><image xlink:href="/images/no-such-image-really.png" id="no-such-image-really.png" class="resource"></svg>
29+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<!DOCTYPE html>
2+
<!-- DO NOT EDIT! This test has been generated by /2dcontext/tools/gentest.py. -->
3+
<title>Canvas test: 2d.pattern.svgimage.zeroheight</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
<script src="/2dcontext/resources/canvas-tests.js"></script>
7+
<link rel="stylesheet" href="/2dcontext/resources/canvas-tests.css">
8+
<body class="show_output">
9+
10+
<h1>2d.pattern.svgimage.zeroheight</h1>
11+
<p class="desc"></p>
12+
13+
14+
<p class="output">Actual output:</p>
15+
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
16+
17+
<ul id="d"></ul>
18+
<script>
19+
var t = async_test("");
20+
_addTest(function(canvas, ctx) {
21+
22+
var img = document.getElementById('red-zeroheight.svg');
23+
_assertSame(ctx.createPattern(img, 'repeat'), null, "ctx.createPattern(img, 'repeat')", "null");
24+
25+
26+
});
27+
</script>
28+
<svg><image xlink:href="/images/red-zeroheight.svg" id="red-zeroheight.svg" class="resource"></svg>
29+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<!DOCTYPE html>
2+
<!-- DO NOT EDIT! This test has been generated by /2dcontext/tools/gentest.py. -->
3+
<title>Canvas test: 2d.pattern.svgimage.zerowidth</title>
4+
<script src="/resources/testharness.js"></script>
5+
<script src="/resources/testharnessreport.js"></script>
6+
<script src="/2dcontext/resources/canvas-tests.js"></script>
7+
<link rel="stylesheet" href="/2dcontext/resources/canvas-tests.css">
8+
<body class="show_output">
9+
10+
<h1>2d.pattern.svgimage.zerowidth</h1>
11+
<p class="desc"></p>
12+
13+
14+
<p class="output">Actual output:</p>
15+
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
16+
17+
<ul id="d"></ul>
18+
<script>
19+
var t = async_test("");
20+
_addTest(function(canvas, ctx) {
21+
22+
var img = document.getElementById('red-zerowidth.svg');
23+
_assertSame(ctx.createPattern(img, 'repeat'), null, "ctx.createPattern(img, 'repeat')", "null");
24+
25+
26+
});
27+
</script>
28+
<svg><image xlink:href="/images/red-zerowidth.svg" id="red-zerowidth.svg" class="resource"></svg>
29+

2dcontext/tools/gentestutils.py

+6
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,12 @@ def expand_test_code(code):
361361
used_images[i] = 1
362362
i = '../images/%s' % i
363363
images += '<img src="%s" id="%s" class="resource">\n' % (i,id)
364+
for i in test.get('svgimages', []):
365+
id = i.split('/')[-1]
366+
if '/' not in i:
367+
used_images[i] = 1
368+
i = '../images/%s' % i
369+
images += '<svg><image xlink:href="%s" id="%s" class="resource"></svg>\n' % (i,id)
364370
images = images.replace("../images/", "/images/")
365371

366372
fonts = ''

2dcontext/tools/tests2d.yaml

+75-1
Original file line numberDiff line numberDiff line change
@@ -2898,13 +2898,87 @@
28982898
28992899
- name: 2d.pattern.image.broken
29002900
testing:
2901-
- 2d.pattern.incomplete.image
2901+
- 2d.pattern.broken.image
29022902
images:
29032903
- broken.png
29042904
code: |
29052905
var img = document.getElementById('broken.png');
29062906
@assert ctx.createPattern(img, 'repeat') === null;
29072907
2908+
- name: 2d.pattern.image.nonexistent
2909+
testing:
2910+
- 2d.pattern.nonexistent.image
2911+
images:
2912+
- no-such-image-really.png
2913+
code: |
2914+
var img = document.getElementById('no-such-image-really.png');
2915+
@assert throws INVALID_STATE_ERR ctx.createPattern(img, 'repeat');
2916+
2917+
- name: 2d.pattern.svgimage.nonexistent
2918+
testing:
2919+
- 2d.pattern.nonexistent.svgimage
2920+
svgimages:
2921+
- no-such-image-really.png
2922+
code: |
2923+
var img = document.getElementById('no-such-image-really.png');
2924+
@assert throws INVALID_STATE_ERR ctx.createPattern(img, 'repeat');
2925+
2926+
- name: 2d.pattern.image.nonexistent-but-loading
2927+
testing:
2928+
- 2d.pattern.nonexistent-but-loading.image
2929+
code: |
2930+
var img = document.createElement("img");
2931+
img.src = "/images/no-such-image-really.png";
2932+
@assert ctx.createPattern(img, 'repeat') === null;
2933+
var img = document.createElementNS("http://www.w3.org/2000/svg", "image");
2934+
img.src = "/images/no-such-image-really.png";
2935+
@assert ctx.createPattern(img, 'repeat') === null;
2936+
2937+
- name: 2d.pattern.image.nosrc
2938+
testing:
2939+
- 2d.pattern.nosrc.image
2940+
code: |
2941+
var img = document.createElement("img");
2942+
@assert ctx.createPattern(img, 'repeat') === null;
2943+
var img = document.createElementNS("http://www.w3.org/2000/svg", "image");
2944+
@assert ctx.createPattern(img, 'repeat') === null;
2945+
2946+
- name: 2d.pattern.image.zerowidth
2947+
testing:
2948+
- 2d.pattern.zerowidth.image
2949+
images:
2950+
- red-zerowidth.svg
2951+
code: |
2952+
var img = document.getElementById('red-zerowidth.svg');
2953+
@assert ctx.createPattern(img, 'repeat') === null;
2954+
2955+
- name: 2d.pattern.image.zeroheight
2956+
testing:
2957+
- 2d.pattern.zeroheight.image
2958+
images:
2959+
- red-zeroheight.svg
2960+
code: |
2961+
var img = document.getElementById('red-zeroheight.svg');
2962+
@assert ctx.createPattern(img, 'repeat') === null;
2963+
2964+
- name: 2d.pattern.svgimage.zerowidth
2965+
testing:
2966+
- 2d.pattern.zerowidth.svgimage
2967+
svgimages:
2968+
- red-zerowidth.svg
2969+
code: |
2970+
var img = document.getElementById('red-zerowidth.svg');
2971+
@assert ctx.createPattern(img, 'repeat') === null;
2972+
2973+
- name: 2d.pattern.svgimage.zeroheight
2974+
testing:
2975+
- 2d.pattern.zeroheight.svgimage
2976+
svgimages:
2977+
- red-zeroheight.svg
2978+
code: |
2979+
var img = document.getElementById('red-zeroheight.svg');
2980+
@assert ctx.createPattern(img, 'repeat') === null;
2981+
29082982
- name: 2d.pattern.repeat.empty
29092983
testing:
29102984
- 2d.pattern.missing

0 commit comments

Comments
 (0)