Diff
Modified: trunk/LayoutTests/ChangeLog (268712 => 268713)
--- trunk/LayoutTests/ChangeLog 2020-10-20 03:45:54 UTC (rev 268712)
+++ trunk/LayoutTests/ChangeLog 2020-10-20 03:45:59 UTC (rev 268713)
@@ -1,3 +1,14 @@
+2020-10-19 Sihui Liu <sihui_...@apple.com>
+
+ Import speech tests from WPT
+ https://bugs.webkit.org/show_bug.cgi?id=217910
+
+ Reviewed by Youenn Fablet.
+
+ * TestExpectations:
+ * platform/ios/TestExpectations:
+ * platform/mac/TestExpectations:
+
2020-10-19 Karl Rackler <rack...@apple.com>
REGRESSION (268605?): [ Mojave+ wk2 ] 4 wpt/service-workers tests are flaky failures
Modified: trunk/LayoutTests/TestExpectations (268712 => 268713)
--- trunk/LayoutTests/TestExpectations 2020-10-20 03:45:54 UTC (rev 268712)
+++ trunk/LayoutTests/TestExpectations 2020-10-20 03:45:59 UTC (rev 268713)
@@ -172,6 +172,8 @@
fast/forms/call-text-did-change-in-text-field-when-typing.html [ Skip ]
http/tests/in-app-browser-privacy/ [ Skip ]
+# Only partial support on Cocoa platforms.
+imported/w3c/web-platform-tests/speech-api/ [ Skip ]
# Only Mac and iOS have an implementation of UIScriptController::doAsyncTask().
fast/harness/uiscriptcontroller [ Skip ]
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (268712 => 268713)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2020-10-20 03:45:54 UTC (rev 268712)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2020-10-20 03:45:59 UTC (rev 268713)
@@ -1,3 +1,43 @@
+2020-10-19 Sihui Liu <sihui_...@apple.com>
+
+ Import speech tests from WPT
+ https://bugs.webkit.org/show_bug.cgi?id=217910
+
+ Reviewed by Youenn Fablet.
+
+ * resources/import-expectations.json:
+ * web-platform-tests/speech-api/META.yml: Added.
+ * web-platform-tests/speech-api/SpeechRecognition-basics.https-expected.txt: Added.
+ * web-platform-tests/speech-api/SpeechRecognition-basics.https.html: Added.
+ * web-platform-tests/speech-api/SpeechSynthesis-speak-ownership-expected.txt: Added.
+ * web-platform-tests/speech-api/SpeechSynthesis-speak-ownership.html: Added.
+ * web-platform-tests/speech-api/SpeechSynthesis-speak-twice-expected.txt: Added.
+ * web-platform-tests/speech-api/SpeechSynthesis-speak-twice.html: Added.
+ * web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds-expected.txt: Added.
+ * web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds.html: Added.
+ * web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative-expected.txt: Added.
+ * web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html: Added.
+ * web-platform-tests/speech-api/SpeechSynthesisUtterance-basics.https-expected.txt: Added.
+ * web-platform-tests/speech-api/SpeechSynthesisUtterance-basics.https.html: Added.
+ * web-platform-tests/speech-api/historical-expected.txt: Added.
+ * web-platform-tests/speech-api/historical.html: Added.
+ * web-platform-tests/speech-api/idlharness.window-expected.txt: Added.
+ * web-platform-tests/speech-api/idlharness.window.html: Added.
+ * web-platform-tests/speech-api/idlharness.window.js: Added.
+ * web-platform-tests/speech-api/w3c-import.log: Added.
+ * web-platform-tests/speech-api/webspeech.js: Added.
+ (typeof):
+ (reco.onstart.onstartTest.step_func):
+ (reco.onend):
+ (neverFireEvent):
+ (this.count):
+ (this.test):
+ (this.done):
+ (CycleTest.this.startEvent):
+ (CycleTest.this.endEvent):
+ (CycleTest.this.done):
+ (CycleTest):
+
2020-10-19 Alexey Shvayka <shvaikal...@gmail.com>
[WebIDL] %Interface%.prototype.constructor should be defined on [[Set]] receiver
Modified: trunk/LayoutTests/imported/w3c/resources/import-expectations.json (268712 => 268713)
--- trunk/LayoutTests/imported/w3c/resources/import-expectations.json 2020-10-20 03:45:54 UTC (rev 268712)
+++ trunk/LayoutTests/imported/w3c/resources/import-expectations.json 2020-10-20 03:45:59 UTC (rev 268713)
@@ -378,7 +378,7 @@
"web-platform-tests/service-workers": "import",
"web-platform-tests/shadow-dom": "import",
"web-platform-tests/shadow-dom/untriaged": "skip",
- "web-platform-tests/speech-api": "skip",
+ "web-platform-tests/speech-api": "import",
"web-platform-tests/staticrange": "skip",
"web-platform-tests/storage": "skip",
"web-platform-tests/streams": "import",
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/META.yml (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/META.yml (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/META.yml 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,4 @@
+spec: https://w3c.github.io/speech-api/
+suggested_reviewers:
+ - andrenatal
+ - gshires
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechRecognition-basics.https-expected.txt (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechRecognition-basics.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechRecognition-basics.https-expected.txt 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,3 @@
+
+FAIL SpeechRecognition basics Can't find variable: SpeechRecognition
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechRecognition-basics.https.html (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechRecognition-basics.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechRecognition-basics.https.html 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<title>SpeechRecognition basics</title>
+<script src=""
+<script src=""
+<script>
+test(function() {
+ const reco = new SpeechRecognition();
+ assert_equals(reco.grammars.length, 0, 'SpeechRecognition.grammars.length');
+ assert_equals(reco.lang, '', 'SpeechRecognition.lang');
+ assert_false(reco.continuous, 'SpeechRecognition.continuous');
+ assert_false(reco.interimResults, 'SpeechRecognition.interimResults');
+ assert_equals(reco.maxAlternatives, 1, 'SpeechRecognition.maxAlternatives');
+});
+</script>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-ownership-expected.txt (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-ownership-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-ownership-expected.txt 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,4 @@
+
+
+FAIL Using the same SpeechSynthesisUtterance with two SpeechSynthesis instances Can't find variable: assert_throws
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-ownership.html (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-ownership.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-ownership.html 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,23 @@
+<!doctype html>
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<iframe></iframe>
+<script>
+// using an utterance for different SpeechSynthesis instances should throw
+async_test(t => {
+ test_driver.bless('speechSynthesis.speak', t.step_func_done(() => {
+ // the utterance is short to make the test faster
+ const utter = new SpeechSynthesisUtterance('1');
+ const iframe = document.querySelector('iframe');
+ assert_not_equals(speechSynthesis, iframe.contentWindow.speechSynthesis);
+ speechSynthesis.speak(utter);
+ // the spec doesn't say what exception to throw:
+ // https://github.com/w3c/speech-api/issues/8
+ assert_throws(null, () => {
+ iframe.contentWindow.speechSynthesis.speak(utter);
+ });
+ }));
+}, 'Using the same SpeechSynthesisUtterance with two SpeechSynthesis instances');
+</script>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-twice-expected.txt (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-twice-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-twice-expected.txt 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,3 @@
+
+PASS Using the same SpeechSynthesisUtterance twice for speechSynthesis.speak()
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-twice.html (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-twice.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-twice.html 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,22 @@
+<!doctype html>
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<body>
+<script>
+// using an utterance twice on the same SpeechSynthesis instance should work
+// https://github.com/w3c/speech-api/issues/7
+async_test(t => {
+ test_driver.bless('speechSynthesis.speak', t.step_func(() => {
+ // the utterance is short to make the test faster
+ const utter = new SpeechSynthesisUtterance('1');
+ speechSynthesis.speak(utter);
+ utter._onend_ = t.step_func(() => {
+ speechSynthesis.speak(utter);
+ // pass if the utterance finishes a second time
+ utter._onend_ = t.step_func_done();
+ });
+ }));
+}, 'Using the same SpeechSynthesisUtterance twice for speechSynthesis.speak()');
+</script>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds-expected.txt (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds-expected.txt 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,3 @@
+
+PASS speechSynthesis.speak requires user activation
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds.html (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds.html 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,15 @@
+<!doctype html>
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<body>
+<script>
+async_test(t => {
+ test_driver.bless('speechSynthesis.speak', t.step_func(() => {
+ const utter = new SpeechSynthesisUtterance('1');
+ utter._onend_ = t.step_func_done();
+ speechSynthesis.speak(utter);
+ }));
+}, 'speechSynthesis.speak requires user activation');
+</script>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative-expected.txt (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative-expected.txt 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,3 @@
+
+FAIL speechSynthesis.speak requires user activation assert_unreached: Reached unreachable code
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,16 @@
+<!doctype html>
+<script src=""
+<script src=""
+<body>
+<script>
+// TODO(csharrison): Make this test not tentative once
+// https://github.com/w3c/speech-api/issues/35 is resolved.
+async_test(t => {
+ const utter = new SpeechSynthesisUtterance('1');
+ utter._onerror_ = t.step_func_done((e) => {
+ assert_equals(e.name, "not-allowed");
+ });
+ utter._onend_ = t.step_func_done(() => assert_unreached());
+ speechSynthesis.speak(utter);
+}, 'speechSynthesis.speak requires user activation');
+</script>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesisUtterance-basics.https-expected.txt (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesisUtterance-basics.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesisUtterance-basics.https-expected.txt 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,10 @@
+
+PASS new SpeechSynthesisUtterance() default text
+PASS new SpeechSynthesisUtterance() default lang
+PASS new SpeechSynthesisUtterance() default voice
+PASS new SpeechSynthesisUtterance() default volume
+PASS new SpeechSynthesisUtterance() default rate
+PASS new SpeechSynthesisUtterance() default pitch
+PASS new SpeechSynthesisUtterance("hello") text and defaults
+PASS SpeechSynthesisUtterance text setter
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesisUtterance-basics.https.html (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesisUtterance-basics.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesisUtterance-basics.https.html 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<title>SpeechSynthesisUtterance basics</title>
+<script src=""
+<script src=""
+<script>
+const DEFAULTS = {
+ text: '',
+ lang: '',
+ voice: null,
+ volume: 1,
+ rate: 1,
+ pitch: 1,
+};
+
+for (const prop in DEFAULTS) {
+ test(function() {
+ const utt = new SpeechSynthesisUtterance();
+ assert_equals(utt[prop], DEFAULTS[prop], prop);
+ }, `new SpeechSynthesisUtterance() default ${prop}`);
+}
+
+test(function() {
+ const utt = new SpeechSynthesisUtterance("hello");
+ assert_equals(utt.text, 'hello', 'text');
+ // check that the other properties retain their defaults
+ for (const prop in DEFAULTS) {
+ if (prop != 'text') {
+ assert_equals(utt[prop], DEFAULTS[prop], prop);
+ }
+ }
+}, 'new SpeechSynthesisUtterance("hello") text and defaults');
+
+test(function() {
+ const utt = new SpeechSynthesisUtterance();
+ utt.text = 'word';
+ assert_equals(utt.text, 'word');
+}, 'SpeechSynthesisUtterance text setter');
+
+// TODO: setters https://github.com/w3c/speech-api/issues/29
+</script>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/historical-expected.txt (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/historical-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/historical-expected.txt 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,8 @@
+
+PASS SpeechRecognitionError interface should not exist
+PASS webkitSpeechGrammar interface should not exist
+PASS webkitSpeechGrammarList interface should not exist
+PASS webkitSpeechRecognition interface should not exist
+PASS webkitSpeechRecognitionError interface should not exist
+PASS webkitSpeechRecognitionEvent interface should not exist
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/historical.html (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/historical.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/historical.html 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,19 @@
+<!doctype html>
+<title>Historical Speech API features</title>
+<script src=""
+<script src=""
+<div id="log"></div>
+<script>
+[
+ "SpeechRecognitionError",
+ "webkitSpeechGrammar",
+ "webkitSpeechGrammarList",
+ "webkitSpeechRecognition",
+ "webkitSpeechRecognitionError",
+ "webkitSpeechRecognitionEvent",
+].forEach(name => {
+ test(function() {
+ assert_false(name in window);
+ }, name + " interface should not exist");
+});
+</script>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window-expected.txt (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window-expected.txt 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,231 @@
+
+PASS idl_test setup
+PASS idl_test validation
+PASS Partial interface Window: original interface defined
+PASS Partial interface Window: member names are unique
+PASS Partial interface Window[2]: member names are unique
+PASS Partial interface Window[3]: member names are unique
+PASS Window includes GlobalEventHandlers: member names are unique
+PASS Window includes WindowEventHandlers: member names are unique
+PASS Window includes WindowOrWorkerGlobalScope: member names are unique
+PASS Window includes AnimationFrameProvider: member names are unique
+PASS Window includes WindowSessionStorage: member names are unique
+PASS Window includes WindowLocalStorage: member names are unique
+FAIL SpeechRecognition interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface object length assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface object name assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute grammars assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute lang assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute continuous assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute interimResults assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute maxAlternatives assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: operation start() assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: operation stop() assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: operation abort() assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onaudiostart assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onsoundstart assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onspeechstart assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onspeechend assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onsoundend assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onaudioend assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onresult assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onnomatch assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onerror assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onstart assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition interface: attribute onend assert_own_property: self does not have own property "SpeechRecognition" expected property "SpeechRecognition" missing
+FAIL SpeechRecognition must be primary interface of new SpeechRecognition() assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL Stringification of new SpeechRecognition() assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "grammars" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "lang" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "continuous" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "interimResults" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "maxAlternatives" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "start()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "stop()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "abort()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onaudiostart" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onsoundstart" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onspeechstart" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onspeechend" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onsoundend" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onaudioend" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onresult" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onnomatch" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onerror" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onstart" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognition interface: new SpeechRecognition() must inherit property "onend" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechRecognition"
+FAIL SpeechRecognitionErrorEvent interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechRecognitionErrorEvent" expected property "SpeechRecognitionErrorEvent" missing
+FAIL SpeechRecognitionErrorEvent interface object length assert_own_property: self does not have own property "SpeechRecognitionErrorEvent" expected property "SpeechRecognitionErrorEvent" missing
+FAIL SpeechRecognitionErrorEvent interface object name assert_own_property: self does not have own property "SpeechRecognitionErrorEvent" expected property "SpeechRecognitionErrorEvent" missing
+FAIL SpeechRecognitionErrorEvent interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechRecognitionErrorEvent" expected property "SpeechRecognitionErrorEvent" missing
+FAIL SpeechRecognitionErrorEvent interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechRecognitionErrorEvent" expected property "SpeechRecognitionErrorEvent" missing
+FAIL SpeechRecognitionErrorEvent interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechRecognitionErrorEvent" expected property "SpeechRecognitionErrorEvent" missing
+FAIL SpeechRecognitionErrorEvent interface: attribute error assert_own_property: self does not have own property "SpeechRecognitionErrorEvent" expected property "SpeechRecognitionErrorEvent" missing
+FAIL SpeechRecognitionErrorEvent interface: attribute message assert_own_property: self does not have own property "SpeechRecognitionErrorEvent" expected property "SpeechRecognitionErrorEvent" missing
+FAIL SpeechRecognitionAlternative interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechRecognitionAlternative" expected property "SpeechRecognitionAlternative" missing
+FAIL SpeechRecognitionAlternative interface object length assert_own_property: self does not have own property "SpeechRecognitionAlternative" expected property "SpeechRecognitionAlternative" missing
+FAIL SpeechRecognitionAlternative interface object name assert_own_property: self does not have own property "SpeechRecognitionAlternative" expected property "SpeechRecognitionAlternative" missing
+FAIL SpeechRecognitionAlternative interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechRecognitionAlternative" expected property "SpeechRecognitionAlternative" missing
+FAIL SpeechRecognitionAlternative interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechRecognitionAlternative" expected property "SpeechRecognitionAlternative" missing
+FAIL SpeechRecognitionAlternative interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechRecognitionAlternative" expected property "SpeechRecognitionAlternative" missing
+FAIL SpeechRecognitionAlternative interface: attribute transcript assert_own_property: self does not have own property "SpeechRecognitionAlternative" expected property "SpeechRecognitionAlternative" missing
+FAIL SpeechRecognitionAlternative interface: attribute confidence assert_own_property: self does not have own property "SpeechRecognitionAlternative" expected property "SpeechRecognitionAlternative" missing
+FAIL SpeechRecognitionResult interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechRecognitionResult" expected property "SpeechRecognitionResult" missing
+FAIL SpeechRecognitionResult interface object length assert_own_property: self does not have own property "SpeechRecognitionResult" expected property "SpeechRecognitionResult" missing
+FAIL SpeechRecognitionResult interface object name assert_own_property: self does not have own property "SpeechRecognitionResult" expected property "SpeechRecognitionResult" missing
+FAIL SpeechRecognitionResult interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechRecognitionResult" expected property "SpeechRecognitionResult" missing
+FAIL SpeechRecognitionResult interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechRecognitionResult" expected property "SpeechRecognitionResult" missing
+FAIL SpeechRecognitionResult interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechRecognitionResult" expected property "SpeechRecognitionResult" missing
+FAIL SpeechRecognitionResult interface: attribute length assert_own_property: self does not have own property "SpeechRecognitionResult" expected property "SpeechRecognitionResult" missing
+FAIL SpeechRecognitionResult interface: operation item(unsigned long) assert_own_property: self does not have own property "SpeechRecognitionResult" expected property "SpeechRecognitionResult" missing
+FAIL SpeechRecognitionResult interface: attribute isFinal assert_own_property: self does not have own property "SpeechRecognitionResult" expected property "SpeechRecognitionResult" missing
+FAIL SpeechRecognitionResultList interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechRecognitionResultList" expected property "SpeechRecognitionResultList" missing
+FAIL SpeechRecognitionResultList interface object length assert_own_property: self does not have own property "SpeechRecognitionResultList" expected property "SpeechRecognitionResultList" missing
+FAIL SpeechRecognitionResultList interface object name assert_own_property: self does not have own property "SpeechRecognitionResultList" expected property "SpeechRecognitionResultList" missing
+FAIL SpeechRecognitionResultList interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechRecognitionResultList" expected property "SpeechRecognitionResultList" missing
+FAIL SpeechRecognitionResultList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechRecognitionResultList" expected property "SpeechRecognitionResultList" missing
+FAIL SpeechRecognitionResultList interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechRecognitionResultList" expected property "SpeechRecognitionResultList" missing
+FAIL SpeechRecognitionResultList interface: attribute length assert_own_property: self does not have own property "SpeechRecognitionResultList" expected property "SpeechRecognitionResultList" missing
+FAIL SpeechRecognitionResultList interface: operation item(unsigned long) assert_own_property: self does not have own property "SpeechRecognitionResultList" expected property "SpeechRecognitionResultList" missing
+FAIL SpeechRecognitionEvent interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechRecognitionEvent" expected property "SpeechRecognitionEvent" missing
+FAIL SpeechRecognitionEvent interface object length assert_own_property: self does not have own property "SpeechRecognitionEvent" expected property "SpeechRecognitionEvent" missing
+FAIL SpeechRecognitionEvent interface object name assert_own_property: self does not have own property "SpeechRecognitionEvent" expected property "SpeechRecognitionEvent" missing
+FAIL SpeechRecognitionEvent interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechRecognitionEvent" expected property "SpeechRecognitionEvent" missing
+FAIL SpeechRecognitionEvent interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechRecognitionEvent" expected property "SpeechRecognitionEvent" missing
+FAIL SpeechRecognitionEvent interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechRecognitionEvent" expected property "SpeechRecognitionEvent" missing
+FAIL SpeechRecognitionEvent interface: attribute resultIndex assert_own_property: self does not have own property "SpeechRecognitionEvent" expected property "SpeechRecognitionEvent" missing
+FAIL SpeechRecognitionEvent interface: attribute results assert_own_property: self does not have own property "SpeechRecognitionEvent" expected property "SpeechRecognitionEvent" missing
+FAIL SpeechGrammar interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechGrammar" expected property "SpeechGrammar" missing
+FAIL SpeechGrammar interface object length assert_own_property: self does not have own property "SpeechGrammar" expected property "SpeechGrammar" missing
+FAIL SpeechGrammar interface object name assert_own_property: self does not have own property "SpeechGrammar" expected property "SpeechGrammar" missing
+FAIL SpeechGrammar interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechGrammar" expected property "SpeechGrammar" missing
+FAIL SpeechGrammar interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechGrammar" expected property "SpeechGrammar" missing
+FAIL SpeechGrammar interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechGrammar" expected property "SpeechGrammar" missing
+FAIL SpeechGrammar interface: attribute src assert_own_property: self does not have own property "SpeechGrammar" expected property "SpeechGrammar" missing
+FAIL SpeechGrammar interface: attribute weight assert_own_property: self does not have own property "SpeechGrammar" expected property "SpeechGrammar" missing
+FAIL SpeechGrammar must be primary interface of new SpeechGrammar() assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammar"
+FAIL Stringification of new SpeechGrammar() assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammar"
+FAIL SpeechGrammar interface: new SpeechGrammar() must inherit property "src" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammar"
+FAIL SpeechGrammar interface: new SpeechGrammar() must inherit property "weight" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammar"
+FAIL SpeechGrammarList interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList interface object length assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList interface object name assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList interface: attribute length assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList interface: operation item(unsigned long) assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList interface: operation addFromURI(DOMString, optional float) assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList interface: operation addFromString(DOMString, optional float) assert_own_property: self does not have own property "SpeechGrammarList" expected property "SpeechGrammarList" missing
+FAIL SpeechGrammarList must be primary interface of new SpeechGrammarList() assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammarList"
+FAIL Stringification of new SpeechGrammarList() assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammarList"
+FAIL SpeechGrammarList interface: new SpeechGrammarList() must inherit property "length" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammarList"
+FAIL SpeechGrammarList interface: new SpeechGrammarList() must inherit property "item(unsigned long)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammarList"
+FAIL SpeechGrammarList interface: calling item(unsigned long) on new SpeechGrammarList() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammarList"
+FAIL SpeechGrammarList interface: new SpeechGrammarList() must inherit property "addFromURI(DOMString, optional float)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammarList"
+FAIL SpeechGrammarList interface: calling addFromURI(DOMString, optional float) on new SpeechGrammarList() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammarList"
+FAIL SpeechGrammarList interface: new SpeechGrammarList() must inherit property "addFromString(DOMString, optional float)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammarList"
+FAIL SpeechGrammarList interface: calling addFromString(DOMString, optional float) on new SpeechGrammarList() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: Can't find variable: SpeechGrammarList"
+FAIL SpeechSynthesis interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface object length assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface object name assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: attribute pending assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: attribute speaking assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: attribute paused assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: attribute onvoiceschanged assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: operation speak(SpeechSynthesisUtterance) assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: operation cancel() assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: operation pause() assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: operation resume() assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis interface: operation getVoices() assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+FAIL SpeechSynthesis must be primary interface of speechSynthesis assert_own_property: self does not have own property "SpeechSynthesis" expected property "SpeechSynthesis" missing
+PASS Stringification of speechSynthesis
+PASS SpeechSynthesis interface: speechSynthesis must inherit property "pending" with the proper type
+PASS SpeechSynthesis interface: speechSynthesis must inherit property "speaking" with the proper type
+PASS SpeechSynthesis interface: speechSynthesis must inherit property "paused" with the proper type
+FAIL SpeechSynthesis interface: speechSynthesis must inherit property "onvoiceschanged" with the proper type assert_inherits: property "onvoiceschanged" not found in prototype chain
+PASS SpeechSynthesis interface: speechSynthesis must inherit property "speak(SpeechSynthesisUtterance)" with the proper type
+PASS SpeechSynthesis interface: calling speak(SpeechSynthesisUtterance) on speechSynthesis with too few arguments must throw TypeError
+PASS SpeechSynthesis interface: speechSynthesis must inherit property "cancel()" with the proper type
+PASS SpeechSynthesis interface: speechSynthesis must inherit property "pause()" with the proper type
+PASS SpeechSynthesis interface: speechSynthesis must inherit property "resume()" with the proper type
+PASS SpeechSynthesis interface: speechSynthesis must inherit property "getVoices()" with the proper type
+PASS SpeechSynthesisUtterance interface: existence and properties of interface object
+PASS SpeechSynthesisUtterance interface object length
+PASS SpeechSynthesisUtterance interface object name
+PASS SpeechSynthesisUtterance interface: existence and properties of interface prototype object
+PASS SpeechSynthesisUtterance interface: existence and properties of interface prototype object's "constructor" property
+PASS SpeechSynthesisUtterance interface: existence and properties of interface prototype object's @@unscopables property
+PASS SpeechSynthesisUtterance interface: attribute text
+PASS SpeechSynthesisUtterance interface: attribute lang
+PASS SpeechSynthesisUtterance interface: attribute voice
+PASS SpeechSynthesisUtterance interface: attribute volume
+PASS SpeechSynthesisUtterance interface: attribute rate
+PASS SpeechSynthesisUtterance interface: attribute pitch
+PASS SpeechSynthesisUtterance interface: attribute onstart
+PASS SpeechSynthesisUtterance interface: attribute onend
+PASS SpeechSynthesisUtterance interface: attribute onerror
+PASS SpeechSynthesisUtterance interface: attribute onpause
+PASS SpeechSynthesisUtterance interface: attribute onresume
+PASS SpeechSynthesisUtterance interface: attribute onmark
+PASS SpeechSynthesisUtterance interface: attribute onboundary
+PASS SpeechSynthesisUtterance must be primary interface of new SpeechSynthesisUtterance()
+PASS Stringification of new SpeechSynthesisUtterance()
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "text" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "lang" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "voice" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "volume" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "rate" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "pitch" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "onstart" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "onend" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "onerror" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "onpause" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "onresume" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "onmark" with the proper type
+PASS SpeechSynthesisUtterance interface: new SpeechSynthesisUtterance() must inherit property "onboundary" with the proper type
+PASS SpeechSynthesisEvent interface: existence and properties of interface object
+FAIL SpeechSynthesisEvent interface object length assert_equals: wrong value for SpeechSynthesisEvent.length expected 2 but got 0
+PASS SpeechSynthesisEvent interface object name
+PASS SpeechSynthesisEvent interface: existence and properties of interface prototype object
+PASS SpeechSynthesisEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS SpeechSynthesisEvent interface: existence and properties of interface prototype object's @@unscopables property
+FAIL SpeechSynthesisEvent interface: attribute utterance assert_true: The prototype object must have a property "utterance" expected true got false
+PASS SpeechSynthesisEvent interface: attribute charIndex
+FAIL SpeechSynthesisEvent interface: attribute charLength assert_true: The prototype object must have a property "charLength" expected true got false
+PASS SpeechSynthesisEvent interface: attribute elapsedTime
+PASS SpeechSynthesisEvent interface: attribute name
+FAIL SpeechSynthesisErrorEvent interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechSynthesisErrorEvent" expected property "SpeechSynthesisErrorEvent" missing
+FAIL SpeechSynthesisErrorEvent interface object length assert_own_property: self does not have own property "SpeechSynthesisErrorEvent" expected property "SpeechSynthesisErrorEvent" missing
+FAIL SpeechSynthesisErrorEvent interface object name assert_own_property: self does not have own property "SpeechSynthesisErrorEvent" expected property "SpeechSynthesisErrorEvent" missing
+FAIL SpeechSynthesisErrorEvent interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechSynthesisErrorEvent" expected property "SpeechSynthesisErrorEvent" missing
+FAIL SpeechSynthesisErrorEvent interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechSynthesisErrorEvent" expected property "SpeechSynthesisErrorEvent" missing
+FAIL SpeechSynthesisErrorEvent interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechSynthesisErrorEvent" expected property "SpeechSynthesisErrorEvent" missing
+FAIL SpeechSynthesisErrorEvent interface: attribute error assert_own_property: self does not have own property "SpeechSynthesisErrorEvent" expected property "SpeechSynthesisErrorEvent" missing
+FAIL SpeechSynthesisVoice interface: existence and properties of interface object assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface object length assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface object name assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface: existence and properties of interface prototype object assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface: attribute voiceURI assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface: attribute name assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface: attribute lang assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface: attribute localService assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice interface: attribute default assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+FAIL SpeechSynthesisVoice must be primary interface of voice assert_own_property: self does not have own property "SpeechSynthesisVoice" expected property "SpeechSynthesisVoice" missing
+PASS Stringification of voice
+PASS SpeechSynthesisVoice interface: voice must inherit property "voiceURI" with the proper type
+PASS SpeechSynthesisVoice interface: voice must inherit property "name" with the proper type
+PASS SpeechSynthesisVoice interface: voice must inherit property "lang" with the proper type
+PASS SpeechSynthesisVoice interface: voice must inherit property "localService" with the proper type
+PASS SpeechSynthesisVoice interface: voice must inherit property "default" with the proper type
+PASS Window interface: attribute speechSynthesis
+PASS Window interface: self must inherit property "speechSynthesis" with the proper type
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window.html (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window.html 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1 @@
+<!-- This file is required for WebKit test infrastructure to run the templated test -->
\ No newline at end of file
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window.js (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window.js (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window.js 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,34 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+'use strict';
+
+idl_test(
+ ['speech-api'],
+ ['dom', 'html'],
+ idl_array => {
+ idl_array.add_objects({
+ SpeechGrammar: ['new SpeechGrammar()'],
+ SpeechGrammarList: ['new SpeechGrammarList()'],
+ SpeechRecognition: ['new SpeechRecognition()'],
+ // TODO: SpeechRecognitionAlternative
+ // TODO: SpeechRecognitionErrorEvent
+ // TODO: SpeechRecognitionEvent
+ // TODO: SpeechRecognitionResult
+ // TODO: SpeechRecognitionResultList
+ SpeechSynthesis: ['speechSynthesis'],
+ // TODO: SpeechSynthesisErrorEvent
+ // TODO: SpeechSynthesisEvent
+ SpeechSynthesisUtterance: ['new SpeechSynthesisUtterance()'],
+ Window: ['self'],
+ });
+
+ // https://w3c.github.io/speech-api/#dom-speechsynthesis-getvoices can
+ // return an empty list, so add SpeechSynthesisVoice conditionally.
+ const voices = speechSynthesis.getVoices();
+ if (voices.length) {
+ self.voice = voices[0];
+ idl_array.add_objects({ SpeechSynthesisVoice: ['voice'] });
+ }
+ }
+);
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/w3c-import.log (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/w3c-import.log (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/w3c-import.log 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,26 @@
+The tests in this directory were imported from the W3C repository.
+Do NOT modify these tests directly in WebKit.
+Instead, create a pull request on the WPT github:
+ https://github.com/web-platform-tests/wpt
+
+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
+
+Do NOT modify or remove this file.
+
+------------------------------------------------------------------------
+Properties requiring vendor prefixes:
+None
+Property values requiring vendor prefixes:
+None
+------------------------------------------------------------------------
+List of files:
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/META.yml
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechRecognition-basics.https.html
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-ownership.html
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-twice.html
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds.html
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/SpeechSynthesisUtterance-basics.https.html
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/historical.html
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/idlharness.window.js
+/LayoutTests/imported/w3c/web-platform-tests/speech-api/webspeech.js
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/webspeech.js (0 => 268713)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/webspeech.js (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/speech-api/webspeech.js 2020-10-20 03:45:59 UTC (rev 268713)
@@ -0,0 +1,112 @@
+var DELAY = 500; // In milliseconds.
+var TIMEOUT = 2000; // In milliseconds. Used for most tests.
+if (typeof(TIMEOUT_OVERRIDE) != 'undefined') {
+ TIMEOUT = TIMEOUT_OVERRIDE;
+}
+GLOBAL_TIMEOUT = TIMEOUT + 2000; // In milliseconds.
+setup({timeout: GLOBAL_TIMEOUT});
+var _onstarted_ = false;
+var neverFireTest = async_test('Events that should not fire',
+ {timeout: TIMEOUT});
+var _onstartTest_ = async_test('onstart', {timeout: TIMEOUT});
+var reco = new SpeechRecognition();
+
+reco._onstart_ = onstartTest.step_func(function(event) {
+ assert_false(onstarted, 'onstart should only fire once.');
+ _onstarted_ = true;
+ onstartTest.done();
+ beginTest();
+});
+
+reco._onend_ = function() {
+ neverFireTest.done();
+ for (var i = 0; i < doneOnEndTestList.length; i++) {
+ doneOnEndTestList[i].done();
+ }
+};
+
+function neverFireEvent(name) {
+ return neverFireTest.step_func(function(event) {
+ assert_unreached(name + ' should not fire.');
+ });
+}
+
+var doneOnEndTestList = []; // List of all test objects to call done at onend.
+
+// Tally calls to count() and test against min/max when test ends.
+// A max value of 0 indicates no maximum.
+function CountTest(name, min, max) {
+ doneOnEndTestList.push(this);
+ this.name = name;
+ this.min = min;
+ this.max = max;
+ this.sum = 0;
+ this.asyncTest = async_test(name, {timeout: TIMEOUT});
+
+ this.count = function(increment) { this.sum += increment; };
+
+ this.test = function() { return this.asyncTest; };
+
+ this.done = function() {
+ var cTest = this;
+ this.asyncTest.step(function() {
+ notes.innerHTML += cTest.name + ' occurred ' + cTest.sum + ' times.<br>';
+ if (cTest.min == cTest.max) {
+ assert_true(cTest.sum == cTest.min, cTest.name + ' occurred ' +
+ cTest.sum + ' times and should have occurred ' +
+ cTest.min + ' times.');
+ } else {
+ assert_true(cTest.sum >= cTest.min, cTest.name + ' occurred ' +
+ cTest.sum + ' times and should have occurred at least ' +
+ cTest.min + ' times.');
+ assert_true(cTest.max == 0 || cTest.sum <= cTest.max, cTest.name +
+ ' occurred ' + cTest.sum +
+ ' times and should have occurred at most ' + cTest.max + ' times.');
+ }
+ if (cTest.whenDone) {
+ cTest.whenDone();
+ }
+ });
+ this.asyncTest.done();
+ };
+}
+
+// Test for proper cycling of startEvent followed by endEvent.
+function CycleTest(name) {
+ doneOnEndTestList.push(this);
+ this.name = name;
+ this.count = 0; // Counts number of start / end cycles.
+ this.started = false; // Tracks whether last event was a start or end event.
+ this.test = async_test(name + ' start/stop', {timeout: TIMEOUT});
+
+ this.startEvent = function() {
+ var cycle = this;
+ return this.test.step_func(function(event) {
+ assert_true(onstarted, cycle.name + 'start fired before onstart.');
+ assert_false(cycle.started, cycle.name + 'start fired twice without ' +
+ cycle.name + 'stop.');
+ cycle.started = true;
+ });
+ };
+
+ this.endEvent = function() {
+ var cycle = this;
+ return this.test.step_func(function(event) {
+ assert_true(cycle.started, cycle.name + 'end fired before ' +
+ cycle.name + 'start.');
+ cycle.started = false;
+ cycle.count += 1;
+ });
+ };
+
+ this.done = function() {
+ var cycle = this;
+ this.test.step(function() {
+ assert_false(cycle.started, cycle.name + 'start fired but not ' +
+ cycle.name + 'end.');
+ assert_true(cycle.count > 0, cycle.name + 'start never fired.');
+ notes.innerHTML += cycle.name + ' cycled ' + cycle.count + ' times.<br>';
+ });
+ this.test.done();
+ };
+}
Modified: trunk/LayoutTests/platform/ios/TestExpectations (268712 => 268713)
--- trunk/LayoutTests/platform/ios/TestExpectations 2020-10-20 03:45:54 UTC (rev 268712)
+++ trunk/LayoutTests/platform/ios/TestExpectations 2020-10-20 03:45:59 UTC (rev 268713)
@@ -34,6 +34,8 @@
imported/w3c/web-platform-tests/dom/events/document-level-touchmove-event-listener-passive-by-default.html [ Pass ]
+imported/w3c/web-platform-tests/speech-api/ [ Pass ]
+
#//////////////////////////////////////////////////////////////////////////////////////////
# End platform-specific directories.
#//////////////////////////////////////////////////////////////////////////////////////////
@@ -3499,5 +3501,9 @@
#<rdar://68952824> [ macOS iOS wk2 ] media/media-continues-playing-after-replace-source.html is a flaky failure
media/media-continues-playing-after-replace-source.html [ Pass Failure ]
+imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-twice.html [ Skip ]
+imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds.html [ Skip ]
+imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html [ Skip ]
+
# This test fails in iOS due to subpixel differences for the marker position
imported/w3c/web-platform-tests/css/css-lists/list-style-type-string-002.html [ ImageOnlyFailure ]
Modified: trunk/LayoutTests/platform/mac/TestExpectations (268712 => 268713)
--- trunk/LayoutTests/platform/mac/TestExpectations 2020-10-20 03:45:54 UTC (rev 268712)
+++ trunk/LayoutTests/platform/mac/TestExpectations 2020-10-20 03:45:59 UTC (rev 268713)
@@ -2246,7 +2246,6 @@
webkit.org/b/217620 inspector/audit/basic-async.htm [ Pass Timeout ]
-
# These are failing on Mojave due to an error in the way CA animations are applied.
# https://bugs.webkit.org/show_bug.cgi?id=217842
[ Mojave ] transitions/interrupted-transition-hardware.html [ Pass Failure ]
@@ -2258,4 +2257,8 @@
webkit.org/b/217931 imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/moving-between-documents/before-prepare-createHTMLDocument-success-empty-src-module.html [ Pass Failure ]
+imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-twice.html [ Skip ]
+imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-with-activation-succeeds.html [ Skip ]
+imported/w3c/web-platform-tests/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html [ Skip ]
+
webkit.org/b/217669 http/wpt/service-workers/service-worker-spinning-install.https.html [ Pass Failure ]