tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

SpeechRecognition-onresult-manual.https.html (5652B)


      1 <!DOCTYPE html>
      2 <html>
      3  <head>
      4    <meta charset="utf-8">
      5    <meta name="timeout" content="long">
      6    <title>SpeechRecognition.onresult</title>
      7    <script src="/resources/testharness.js"></script>
      8    <script src="/resources/testharnessreport.js"></script>
      9    <script>
     10      var TIMEOUT_OVERRIDE = 60000;  // In milliseconds.
     11    </script>
     12    <script src="webspeech.js"></script>
     13  </head>
     14  <body>
     15    <b>Instructions:</b>
     16    <p>Reload and re-run this test at least 4 times to cover all 4 combinations
     17      of these checkboxes:
     18    <input type="checkbox" id="continuous">continuous
     19    <input type="checkbox" id="interim">interimResults
     20    <button id="button" onclick="startButton()">Click and Speak</button>
     21    <br>
     22    You may also wish to test with various combinations of these:
     23    maxAlternatives:
     24    <input type="text" value="3" size="2" id="maxAlternatives">,
     25    language:
     26    <input type="text" value="en-us" size="7" id="language">
     27    </p>
     28    <div id="results"></div>
     29    <div id="log"></div>
     30    <div id="notes"></div>
     31    <script>
     32 var audioTest = new CycleTest('onaudio');
     33 reco.onaudiostart = audioTest.startEvent();
     34 reco.onaudioend = audioTest.endEvent();
     35 
     36 var soundTest = new CycleTest('onsound');
     37 reco.onsoundstart = soundTest.startEvent();
     38 reco.onsoundend = soundTest.endEvent();
     39 
     40 var speechTest = new CycleTest('onspeech');
     41 reco.onspeechstart = speechTest.startEvent();
     42 reco.onspeechend = speechTest.endEvent();
     43 
     44 reco.onerror = neverFireEvent('onerror');
     45 reco.onnomatch = neverFireEvent('onnomatch');
     46 
     47 var lastIsFinal = -1;  // Highest results index that has been marked isFinal.
     48 var lastInterimCount = 0;  // Number of results that are not marked isFinal.
     49 var resultTest = new CountTest('onresult', 1, 9999);
     50 
     51 resultTest.whenDone = function() {
     52  assert_equals(lastInterimCount, 0, 'Number of interim results pending');
     53 };
     54 
     55 function appendAlternatives(array, results) {
     56  for (var i = 0; i < reco.maxAlternatives; i++) {
     57    if (i < results.length) {
     58      array[i] += results[i].transcript;
     59    } else {
     60      array[i] += '<no alternative>';
     61      assert_true(i > 0, 'Must return at least one alternative.');
     62    }
     63  }
     64 }
     65 
     66 reco.onresult = resultTest.test().step_func(function(event) {
     67  resultTest.count(1);
     68  var final = new Array();
     69  var interim = new Array();
     70  for (var i = 0; i < reco.maxAlternatives; i++) {
     71    final[i] = '';
     72    interim[i] = '';
     73  }
     74  assert_true(event.resultIndex > lastIsFinal, 'resultIndex must not ' +
     75      'indicate a change in a result that was previously marked isFinal.');
     76  assert_true(event.resultIndex <= event.results.length,
     77      'resultIndex must not be greater than results.length.');
     78  for (var i = 0; i < event.results.length; ++i) {
     79    assert_true(event.results[i].length <= reco.maxAlternatives,
     80        'Number of alternatives must not exceed maxAlternatives.');
     81    if (event.results[i].isFinal) {
     82      appendAlternatives(final, event.results[i]);
     83      assert_true(reco.continuous || i < 1,
     84          'When SpeechRecognition.continuous is false, no more than one ' +
     85          'SpeechRecognitionResult.isFinal true should be returned.');
     86      if (i > lastIsFinal) {
     87        lastIsFinal = i;
     88      }
     89    } else {
     90      appendAlternatives(interim, event.results[i]);
     91      assert_true(i > lastIsFinal, 'A SpeechRecognitionResult was previously ' +
     92          'marked isFinal, but now is not marked isFinal.');
     93    }
     94  lastInterimCount = event.results.length - lastIsFinal - 1;
     95  assert_true(reco.interimResults || lastInterimCount == 0,
     96      'Should not return interim results when reco.interimResults is false.');
     97  }
     98  for (var i = 0; i < reco.maxAlternatives; i++) {
     99    document.getElementById('final_span_' + i).innerHTML = final[i];
    100    document.getElementById('interim_span_' + i).innerHTML = interim[i];
    101  }
    102 });
    103 
    104 function configureRecognition() {
    105  var continuousBox = document.getElementById('continuous');
    106  var interimBox = document.getElementById('interim');
    107  var maxAlternativesInput = document.getElementById('maxAlternatives');
    108  var langInput = document.getElementById('language');
    109  reco.continuous = continuousBox.checked;
    110  reco.interimResults = interimBox.checked;
    111  reco.maxAlternatives = maxAlternativesInput.value;
    112  reco.lang = langInput.value;
    113  continuousBox.disabled = true;
    114  interimBox.disabled = true;
    115  maxAlternativesInput.disabled = true;
    116  langInput.disabled = true;
    117  test(function() {
    118    assert_equals(reco.continuous, continuousBox.checked,
    119                  'SpeechRecognition.continuous');
    120    assert_equals(reco.interimResults, interim.checked,
    121                  'SpeechRecognition.interimResults');
    122    assert_equals(reco.maxAlternatives, parseInt(maxAlternativesInput.value),
    123                  'SpeechRecognition.maxAlternatives');
    124    assert_equals(reco.lang, langInput.value,
    125                  'SpeechRecognition.lang');
    126  }, 'SpeechRecognition settings');
    127 }
    128 
    129 var clicks = 0;
    130 function startButton() {
    131  var button = document.getElementById('button');
    132  if (++clicks == 1) {
    133    configureRecognition();
    134    if (reco.continuous) {
    135      button.innerHTML = 'Click when done speaking';
    136    } else {
    137      button.hidden = true;
    138    }
    139    var results_html = '';
    140    for (var i = 0; i < reco.maxAlternatives; i++) {
    141      results_html += '<div style="border:1px dotted gray; padding:10px; ' +
    142          'font-weight:bold">' +
    143          '<span id="final_span_' + i + '"></span>' +
    144          '<span id="interim_span_' + i + '" style="color:blue"></span>' +
    145          '</div>';
    146    }
    147    results.innerHTML = results_html;
    148    reco.start();
    149  } else {
    150    button.hidden = true;
    151    reco.stop();
    152  }
    153 }
    154    </script>
    155  </body>
    156 </html>