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

// @dart = 2.9

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);
  });
}
