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

/// TODO(johnniwinther): Currently this only works with the mock compiler.

import "package:expect/expect.dart";
import "package:async_helper/async_helper.dart";
import '../compiler_helper.dart';

const String TEST1 = r"""
var a = [42];
main() {
  return a[0];
}
""";

String TEST2(selectorName, args) {
  return """
var a = [42];
main() {
  a.$selectorName($args);
  return a[0];
}
""";
}

const String TEST3 = r"""
var a = new List(42);
main() {
  return a[0];
}
""";

const String TEST4 = r"""
var a = new List(0);
main() {
  return a[0];
}
""";

const String TEST5 = r"""
var a = [42];
main() {
  a.length = 54;
  return a[0];
}
""";

// Test that the order in which we visit the methods will not bring
// back a length after it has been disabled.
const String TEST6 = r"""
foo(b) {
  var a = [42];
  doIt(a);
  return a[0];
}

doIt(a) {
  a.clear();
  foo(a);
}
main() {
  foo(null);
}
""";

const String TEST7 = r"""
var a = [42, 54];
main() {
  a[0]++;
  return a[1];
}
""";

const String TEST8 = r"""
var b = 42;
var a = new List(b);
main() {
  return a[1];
}
""";

const String TEST9 = r"""
const b = 42;
var a = new List(b);
main() {
  return a[1];
}
""";

checkRangeError(String test, {bool hasRangeError}) async {
  String generated = await compileAll(test, compileMode: CompileMode.memory);
  Expect.equals(
      hasRangeError,
      generated.contains('ioore'),
      "Unexpected use of 'hasRangeError' for test:\n$test\n"
      "in code\n$generated");
}

main() {
  asyncTest(() async {
    await checkRangeError(TEST1, hasRangeError: false);
    await checkRangeError(TEST2('insert', 'null, null'), hasRangeError: true);
    await checkRangeError(TEST2('add', 'null'), hasRangeError: true);
    await checkRangeError(TEST2('clear', ''), hasRangeError: true);
    await checkRangeError(TEST2('toString', ''), hasRangeError: false);
    await checkRangeError(TEST3, hasRangeError: false);
    await checkRangeError(TEST4, hasRangeError: true);
    await checkRangeError(TEST5, hasRangeError: true);
    await checkRangeError(TEST6, hasRangeError: true);
    await checkRangeError(TEST7, hasRangeError: false);
    await checkRangeError(TEST8, hasRangeError: true);
    await checkRangeError(TEST9, hasRangeError: false);
  });
}
