// Copyright (c) 2016, 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.

// Tests of block scoping.

import 'package:expect/expect.dart';

bool oracle() => true;

test0() {
  var x = 'outer', y = x;
  Expect.isTrue(x == 'outer');
  Expect.isTrue(y == 'outer');
  { var x = 'inner';
    Expect.isTrue(x == 'inner');
    Expect.isTrue(y == 'outer');
  }
  Expect.isTrue(x == 'outer');
  Expect.isTrue(y == 'outer');

  if (oracle()) {
    var y = 'inner';
    Expect.isTrue(x == 'outer');
    Expect.isTrue(y == 'inner');
  } else {
    Expect.isTrue(false);
  }
  Expect.isTrue(x == 'outer');
  Expect.isTrue(y == 'outer');
}

var x = 'toplevel';

test1() {
  var y = 'outer';
  Expect.isTrue(x == 'toplevel');
  Expect.isTrue(y == 'outer');
  { var x = 'inner';
    Expect.isTrue(x == 'inner');
    Expect.isTrue(y == 'outer');
  }
  Expect.isTrue(x == 'toplevel');
  Expect.isTrue(y == 'outer');

  if (oracle()) {
    var y = 'inner';
    Expect.isTrue(x == 'toplevel');
    Expect.isTrue(y == 'inner');
  } else {
    Expect.isTrue(false);
  }
  Expect.isTrue(x == 'toplevel');
  Expect.isTrue(y == 'outer');
}

main() {
  test0();
  test1();
}
