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

library crypto_test;
import '../../pkg/unittest/lib/unittest.dart';
import '../../pkg/unittest/lib/html_config.dart';
import 'dart:html';

main() {
  useHtmlConfiguration();

  test('exists', () {
    var crypto = window.crypto;
    expect(crypto is Crypto, isTrue);
  });

  test('successful call', () {
    var crypto = window.crypto;
    var data = new Uint8Array(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 Float32Array(100);
    expect(() {
      crypto.getRandomValues(data);
    }, throws, reason: 'Only typed array views with integer types allowed');
  });
}
