// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:html';
import 'dart:typed_data';

import 'package:expect/legacy/minitest.dart'; // ignore: deprecated_member_use_from_same_package

main() {
  group('supported', () {
    test('supported', () {
      expect(Crypto.supported, true);
    });
  });

  group('functional', () {
    if (Crypto.supported) {
      // This will actually pass on FF since it has a Crypto API, but it is
      // incompatible.
      test('exists', () {
        var crypto = window.crypto;
        expect(crypto is Crypto, isTrue);
      });

      test('successful call', () {
        var crypto = window.crypto!;
        var data = new Uint8List(100);
        expect(data.every((e) => e == 0), isTrue);
        crypto.getRandomValues(data);
        // In theory this is flaky. However, in practice you will get 100 zeroes
        // in a row from a cryptographically secure random number generator so
        // rarely that we don't have to worry about it.
        expect(data.any((e) => e != 0), isTrue);
      });

      test('type mismatch', () {
        var crypto = window.crypto!;
        var data = new Float32List(100);
        expect(
          () {
            crypto.getRandomValues(data);
          },
          throws,
          reason: 'Only typed array views with integer types allowed',
        );
      });
    }
  });
}
