// Copyright (c) 2011, 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 test program for testing execution of finally blocks on
// control flow breaks because of 'return', 'continue' etc.

// @dart = 2.9

import "package:expect/expect.dart";

class Helper {
  Helper() : i = 0 {}

  int f1() {
    try {
      int j;
      j = func();
      i = 1;
      return i; // Value of i on return is 1.
    } finally {
      i = i + 800; // Should get executed on return.
    }
    return i + 200; // Should not get executed.
  }

  static int func() {
    int i = 0;
    while (i < 10) {
      i++;
    }
    return i;
  }

  int i;
}

class ExecuteFinally1Test {
  static testMain() {
    Helper obj = new Helper();
    Expect.equals(1, obj.f1());
    Expect.equals(801, obj.i);
  }
}

main() {
  ExecuteFinally1Test.testMain();
}
