forked from WebKit/WebKit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodel-element-entity-transform.html
107 lines (89 loc) · 4.2 KB
/
model-element-entity-transform.html
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
<!DOCTYPE html> <!-- webkit-test-runner [ ModelElementEnabled=true ModelProcessEnabled=true ] -->
<meta charset="utf-8">
<title><model> entity transform</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/model-element-test-utils.js"></script>
<script src="resources/model-utils.js"></script>
<script src="../resources/js-test-pre.js"></script>
<body>
<script>
'use strict';
promise_test(async t => {
const [model, source] = createModelAndSource(t);
assert_3d_matrix_is_identity(model.entityTransform, true);
}, `<model> with empty source has entityTransform = identity`);
promise_test(async t => {
const [model, source] = createModelAndSource(t, "resources/2x2x2-positive.usdz");
await model.ready;
let originalTransform = model.entityTransform;
assert_3d_matrix_is_identity(originalTransform, false);
let scaledTransform = originalTransform.scale(2, 2, 2);
model.entityTransform = scaledTransform;
assert_3d_matrix_equals(model.entityTransform, scaledTransform);
}, `<model> gets the updated entityTransform after change`);
promise_test(async t => {
const [model, source] = createModelAndSource(t, "resources/2x2x2-positive.usdz");
await model.ready;
let firstModelTransform = model.entityTransform;
source.src = "resources/heart.usdz";
await model.ready;
let secondModelTransform = model.entityTransform;
assert_3d_matrix_not_equals(firstModelTransform, secondModelTransform);
}, `<model> gets the updated entityTransform after model source change`);
promise_test(async t => {
const [model, source] = createModelAndSource(t, "resources/2x2x2-positive.usdz");
await model.ready;
assert_3d_matrix_is_identity(model.entityTransform, false);
return new Promise((resolve, reject) => {
model.addEventListener("error", event => {
assert_3d_matrix_is_identity(model.entityTransform, true);
resolve();
});
source.remove();
});
}, `<model> gets the identity entityTransform after model source removal`);
promise_test(async t => {
const [model, source] = createModelAndSource(t, "resources/2x2x2-positive.usdz");
await model.ready;
let originalTransform = model.entityTransform;
assert_equals(model.stageMode, "");
assert_3d_matrix_is_identity(originalTransform, false);
let scaledTransform = originalTransform.scale(2000, 2000, 2000);
model.entityTransform = scaledTransform;
assert_3d_matrix_equals(model.entityTransform, scaledTransform);
model.stageMode = "orbit";
await new Promise((resolve) => t.step_timeout(resolve, 100));
assert_equals(model.stageMode, "orbit");
assert_3d_matrix_not_equals(model.entityTransform, scaledTransform);
assert_3d_matrix_not_equals(model.entityTransform, originalTransform);
let orbitFitTransform = model.entityTransform;
shouldThrowErrorName(function() {
model.entityTransform = scaledTransform;
assert_3d_matrix_not_equals(model.entityTransform, scaledTransform);
}, "InvalidStateError");
model.stageMode = "none";
await new Promise((resolve) => t.step_timeout(resolve, 100));
assert_equals(model.stageMode, "none");
assert_3d_matrix_not_equals(model.entityTransform, scaledTransform);
assert_3d_matrix_not_equals(model.entityTransform, originalTransform);
assert_3d_matrix_equals(model.entityTransform, orbitFitTransform);
}, `<model> ignores entityTransform when stagemode is set`);
promise_test(async t => {
const [model, source] = createModelAndSource(t, "resources/cube.usdz");
await model.ready;
const angle = 57.64999999999886;
const rotationAmount = 10;
for (var iteration = 0; iteration < 6; ++iteration) {
try {
const matrix = new DOMMatrixReadOnly();
const newMatrix = matrix.translate(0, 0, -10).rotate(0, angle + iteration * rotationAmount, 0);
model.entityTransform = newMatrix;
assert_3d_matrix_equals(model.entityTransform, newMatrix);
} catch (error) {
console.error('Error setting transform: ' + error.name);
}
}
}, `<model> gets the updated entityTransform after rotation`);
</script>
</body>