-
Notifications
You must be signed in to change notification settings - Fork 54
/
brand-checks.any.js
120 lines (99 loc) · 4.64 KB
/
brand-checks.any.js
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
// META: global=worker,jsshell
// META: script=../resources/test-utils.js
'use strict';
const WritableStreamDefaultWriter = new WritableStream().getWriter().constructor;
const WriterProto = WritableStreamDefaultWriter.prototype;
const WritableStreamDefaultController = getWritableStreamDefaultControllerConstructor();
function getWritableStreamDefaultControllerConstructor() {
return realWSDefaultController().constructor;
}
function fakeWS() {
return Object.setPrototypeOf({
get locked() { return false; },
abort() { return Promise.resolve(); },
close() { return Promise.resolve(); },
getWriter() { return fakeWSDefaultWriter(); }
}, WritableStream.prototype);
}
function realWS() {
return new WritableStream();
}
function fakeWSDefaultWriter() {
return Object.setPrototypeOf({
get closed() { return Promise.resolve(); },
get desiredSize() { return 1; },
get ready() { return Promise.resolve(); },
abort() { return Promise.resolve(); },
close() { return Promise.resolve(); },
write() { return Promise.resolve(); }
}, WritableStreamDefaultWriter.prototype);
}
function realWSDefaultWriter() {
const ws = new WritableStream();
return ws.getWriter();
}
function fakeWSDefaultController() {
return Object.setPrototypeOf({
error() { return Promise.resolve(); }
}, WritableStreamDefaultController.prototype);
}
function realWSDefaultController() {
let controller;
new WritableStream({
start(c) {
controller = c;
}
});
return controller;
}
test(() => {
getterThrowsForAll(WritableStream.prototype, 'locked',
[fakeWS(), realWSDefaultWriter(), realWSDefaultController(), undefined, null]);
}, 'WritableStream.prototype.locked enforces a brand check');
promise_test(t => {
return methodRejectsForAll(t, WritableStream.prototype, 'abort',
[fakeWS(), realWSDefaultWriter(), realWSDefaultController(), undefined, null]);
}, 'WritableStream.prototype.abort enforces a brand check');
promise_test(t => {
return methodRejectsForAll(t, WritableStream.prototype, 'close',
[fakeWS(), realWSDefaultWriter(), realWSDefaultController(), undefined, null]);
}, 'WritableStream.prototype.close enforces a brand check');
test(() => {
methodThrowsForAll(WritableStream.prototype, 'getWriter',
[fakeWS(), realWSDefaultWriter(), realWSDefaultController(), undefined, null]);
}, 'WritableStream.prototype.getWriter enforces a brand check');
test(() => {
assert_throws_js(TypeError, () => new WritableStreamDefaultWriter(fakeWS()), 'constructor should throw');
}, 'WritableStreamDefaultWriter constructor enforces a brand check');
test(() => {
getterThrowsForAll(WriterProto, 'desiredSize',
[fakeWSDefaultWriter(), realWS(), realWSDefaultController(), undefined, null]);
}, 'WritableStreamDefaultWriter.prototype.desiredSize enforces a brand check');
promise_test(t => {
return getterRejectsForAll(t, WriterProto, 'closed',
[fakeWSDefaultWriter(), realWS(), realWSDefaultController(), undefined, null]);
}, 'WritableStreamDefaultWriter.prototype.closed enforces a brand check');
promise_test(t => {
return getterRejectsForAll(t, WriterProto, 'ready',
[fakeWSDefaultWriter(), realWS(), realWSDefaultController(), undefined, null]);
}, 'WritableStreamDefaultWriter.prototype.ready enforces a brand check');
promise_test(t => {
return methodRejectsForAll(t, WriterProto, 'abort',
[fakeWSDefaultWriter(), realWS(), realWSDefaultController(), undefined, null]);
}, 'WritableStreamDefaultWriter.prototype.abort enforces a brand check');
promise_test(t => {
return methodRejectsForAll(t, WriterProto, 'write',
[fakeWSDefaultWriter(), realWS(), realWSDefaultController(), undefined, null]);
}, 'WritableStreamDefaultWriter.prototype.write enforces a brand check');
promise_test(t => {
return methodRejectsForAll(t, WriterProto, 'close',
[fakeWSDefaultWriter(), realWS(), realWSDefaultController(), undefined, null]);
}, 'WritableStreamDefaultWriter.prototype.close enforces a brand check');
test(() => {
methodThrowsForAll(WriterProto, 'releaseLock',
[fakeWSDefaultWriter(), realWS(), realWSDefaultController(), undefined, null]);
}, 'WritableStreamDefaultWriter.prototype.releaseLock enforces a brand check');
test(() => {
methodThrowsForAll(WritableStreamDefaultController.prototype, 'error',
[fakeWSDefaultController(), realWS(), realWSDefaultWriter(), undefined, null]);
}, 'WritableStreamDefaultController.prototype.error enforces a brand check');