// 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.

onmessage = event => {
  if (event.data === 'text_encode_decode') {
    const encoder = new TextEncoder();
    const message = 'this is a test';
    const encoded = encoder.encode(message);
    const decoder = new TextDecoder();
    postMessage(decoder.decode(encoded) === message ? 'pass' : 'fail');
  } else {
    postMessage(`Unexpected message received: ${event.data}.`);
  }
};
