| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../js/resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <script type="text/javascript"> |
| description('Test the SpeechRecognitionResult.emma attribute.'); |
| |
| function run() { |
| // Check availability of constructors. |
| shouldBeTrue("'webkitSpeechRecognition' in self"); |
| shouldBeFalse("webkitSpeechRecognition == null"); |
| |
| emmaTest(); |
| } |
| |
| function emmaTest() { |
| var r = new webkitSpeechRecognition(); |
| |
| // Set default handlers. |
| for (var prop in r) { |
| if (prop.match('^on')) { |
| r[prop] = function() { debug('on' + event.type); } |
| } |
| } |
| |
| r.onresult = function() { |
| debug('onresult'); |
| shouldBe('event.result.emma.childNodes.length', '1'); |
| shouldBeEqualToString('event.result.emma.firstChild.nodeName', 'emma:emma'); |
| evalAndLog('window.emma = event.result.emma.firstChild'); |
| shouldBeEqualToString('emma.getAttribute("version")', '1.0'); |
| |
| shouldBe('emma.childNodes.length', '1'); |
| shouldBeEqualToString('emma.firstChild.nodeName', 'emma:one-of'); |
| evalAndLog('window.oneof = emma.firstChild'); |
| evalAndLog("window.emmaNs = 'http://www.w3.org/2003/04/emma'"); |
| shouldBeEqualToString('oneof.getAttribute("emma:medium")', 'acoustic'); |
| shouldBeEqualToString('oneof.getAttributeNS(emmaNs, "medium")', 'acoustic'); |
| shouldBeEqualToString('oneof.getAttribute("emma:mode")', 'voice'); |
| shouldBeEqualToString('oneof.getAttributeNS(emmaNs, "mode")', 'voice'); |
| |
| shouldBe('oneof.childNodes.length', '1'); |
| shouldBeEqualToString('oneof.firstChild.nodeName', 'emma:interpretation'); |
| evalAndLog('window.interpretation = oneof.firstChild'); |
| shouldBeEqualToString('interpretation.getAttribute("id")', '1'); |
| shouldBeEqualToString('interpretation.getAttribute("emma:confidence")', '0.42'); |
| shouldBeEqualToString('interpretation.getAttributeNS(emmaNs, "confidence")', '0.42'); |
| shouldBe('interpretation.getElementsByTagName("literal").length', '1'); |
| evalAndLog('window.literal = interpretation.getElementsByTagName("literal")[0]'); |
| shouldBe('literal.childNodes.length', '1'); |
| shouldBeEqualToString('literal.firstChild.data', 'hello, world'); |
| |
| // Test that SpeechRecognitionResult keeps emma's DOM tree alive. |
| debug("\nTest that emma's DOM tree stays alive:"); |
| evalAndLog('window.emma = null'); |
| evalAndLog('window.oneof = null'); |
| evalAndLog('window.interpretation = null'); |
| evalAndLog('window.literal = null'); |
| evalAndLog('event.result.emma.customProperty = 42'); |
| evalAndLog('gc()'); |
| shouldBe('event.result.emma.customProperty', '42'); |
| } |
| |
| r.onend = function() { |
| debug('onend'); |
| finishJSTest(); |
| } |
| |
| if (window.testRunner) { |
| testRunner.addMockSpeechRecognitionResult('hello, world', 0.42); |
| } |
| r.start(); |
| } |
| |
| window.onload = run; |
| window.jsTestIsAsync = true; |
| </script> |
| <script src="../../js/resources/js-test-post.js"></script> |
| </body> |
| </html> |