<!DOCTYPE html>
<!--
  Copyright 2022 The Cobalt Authors. All Rights Reserved.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<html>

<head>
  <title>Cobalt Text Encoding Test</title>
  <script src='black_box_js_test_utils.js'></script>
</head>

<body>
  <script>
    const tests = [
      'text_encode_decode',
    ];
    let pending = tests.length;
    const worker = new Worker('text_encoding_test.js');
    worker.onmessage = event => {
      assertEqual('pass', event.data);
      pending--;
      if (pending === 0) {
        onEndTest();
      }
    };
    tests.map(test => worker.postMessage(test));
    setupFinished();
    window.setTimeout(notReached, 3000);
  </script>
</body>
</html>
