// 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 "package:expect/expect.dart";
import 'compiler_helper.dart';

const String TEST_ONE = r"""
  foo(a) {
    var myVariableName = a.toString();
    print(myVariableName);
    print(myVariableName);
  }
""";

const String TEST_TWO = r"""
  class A {
    var length;
  }
  foo(a) {
    print([]); // Make sure the array class is instantiated.
    return new A().length + a.length;
  }
""";

main() {
  // Check that one-shot interceptors preserve variable names, see
  // https://code.google.com/p/dart/issues/detail?id=8106.
  String generated = compile(TEST_ONE, entry: 'foo');
  Expect.isTrue(generated.contains(new RegExp(r'[$A-Z]+\.toString\$0\(a\)')));
  Expect.isTrue(generated.contains('myVariableName'));

  // Check that an intercepted getter that does not need to be
  // intercepted, is turned into a regular getter call or field
  // access.
  generated = compile(TEST_TWO, entry: 'foo');
  Expect.isFalse(generated.contains(r'a.get$length()'));
  Expect.isTrue(generated.contains(new RegExp(r'[$A-Z]+\.A\$\(\)\.length')));
  Expect.isTrue(
      generated.contains(new RegExp(r'[$A-Z]+\.get\$length\$as\(a\)')));
}
