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

part of unittest;

/// Class for encapsulating test environment state.
///
/// This is used by the [withTestEnvironment] method to support multiple
/// invocations of the unittest library within the same application
/// instance.
class _TestEnvironment {
  Configuration config;

  // We use a 'dummy' context for the top level to eliminate null
  // checks when querying the context. This allows us to easily
  //  support top-level [setUp]/[tearDown] functions as well.
  final rootContext = new _GroupContext();
  _GroupContext currentContext;

  /// The [currentTestCaseIndex] represents the index of the currently running
  /// test case.
  ///
  /// If this is -1 it implies the test system is not running.
  /// It will be set to [number of test cases] as a short-lived state flagging
  /// that the last test has completed.
  int currentTestCaseIndex = -1;

  /// The [initialized] variable specifies whether the framework
  /// has been initialized.
  bool initialized = false;

  /// The time since we last gave asynchronous code a chance to be scheduled.
  int lastBreath = new DateTime.now().millisecondsSinceEpoch;

  /// The set of tests to run can be restricted by using [solo_test] and
  /// [solo_group].
  ///
  /// As groups can be nested we use a counter to keep track of the nesting
  /// level of soloing, and a flag to tell if we have seen any solo tests.
  int soloNestingLevel = 0;
  bool soloTestSeen = false;

  /// The list of test cases to run.
  final List<TestCase> testCases = new List<TestCase>();

  /// The [uncaughtErrorMessage] holds the error messages that are printed
  /// in the test summary.
  String uncaughtErrorMessage;

  _TestEnvironment() {
    currentContext = rootContext;
  }
}
