// Copyright (c) 2012, 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/minitest.dart';

const N = 1024;

class _TestList {
  _TestList(int n);

  operator[](int i) => i;
  operator[]=(int i, v) {}
}

_obfuscatedList() {
  var a = new Uint8List(N);
  var b = new _TestList(N);
  var k = 0;
  for (int i = 0; i < 10; ++i) {
    k += i;
  }
  return (k == 45) ? a : b;
}

main() {
  // Only perform tests if ArrayBuffer is supported.
  if (!Platform.supportsTypedData) {
    return;
  }

  test('outOfRangeAccess', () {
      var a = _obfuscatedList();

      expect(() => a[a.length], throws);
      expect(() => a[a.length + 1], throws);
      expect(() => a[a.length + N], throws);

      expect(() => a[-1], throws);
      expect(() => a[1.5], throws);
      expect(() => a['length'], throws);

      expect(() => a[a.length] = 0xdeadbeef, throws);
      expect(() => a[a.length + 1] = 0xdeadbeef, throws);
      expect(() => a[a.length + N] = 0xdeadbeef, throws);

      expect(() => a[-1] = 0xdeadbeef, throws);
      expect(() => a[1.5] = 0xdeadbeef, throws);
      expect(() => a['length'] = 1, throws);
  });
}
