| Index: tools/testing/test_case.py | 
| diff --git a/tools/testing/test_case.py b/tools/testing/test_case.py | 
| index 99af9d566fafc4041925dc61a6fa7970999e6454..e7013f0138011cc823670610274ad32dd351cee4 100644 | 
| --- a/tools/testing/test_case.py | 
| +++ b/tools/testing/test_case.py | 
| @@ -2,29 +2,23 @@ | 
| # 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 atexit | 
| -import fileinput | 
| +"""Common TestCase subclasses used to define a single test.""" | 
| + | 
| import os | 
| -import test | 
| -import platform | 
| -import re | 
| -import sys | 
| import tempfile | 
|  | 
| -import architecture | 
| import test | 
| -import utils | 
| - | 
| -from os.path import join, exists, basename | 
| +from testing import architecture | 
|  | 
| -import utils | 
|  | 
| class Error(Exception): | 
| pass | 
|  | 
|  | 
| class StandardTestCase(test.TestCase): | 
| -  def __init__(self, context, path, filename, mode, arch, vm_options = []): | 
| +  """A test case defined by a *Test.dart file.""" | 
| + | 
| +  def __init__(self, context, path, filename, mode, arch, vm_options=None): | 
| super(StandardTestCase, self).__init__(context, path) | 
| self.filename = filename | 
| self.mode = mode | 
| @@ -34,17 +28,18 @@ class StandardTestCase(test.TestCase): | 
| for flag in context.flags: | 
| self.run_arch.vm_options.append(flag) | 
|  | 
| -    for flag in vm_options: | 
| -      self.run_arch.vm_options.append(flag) | 
| +    if vm_options: | 
| +      for flag in vm_options: | 
| +        self.run_arch.vm_options.append(flag) | 
|  | 
| def IsNegative(self): | 
| -    return self.GetName().endswith("NegativeTest") | 
| +    return self.GetName().endswith('NegativeTest') | 
|  | 
| def GetLabel(self): | 
| -    return "%s%s %s" % (self.mode, self.arch, '/'.join(self.path)) | 
| +    return '%s%s %s' % (self.mode, self.arch, '/'.join(self.path)) | 
|  | 
| def GetCommand(self): | 
| -    return self.run_arch.GetRunCommand(); | 
| +    return self.run_arch.GetRunCommand() | 
|  | 
| def GetName(self): | 
| return self.path[-1] | 
| @@ -58,20 +53,30 @@ class StandardTestCase(test.TestCase): | 
| def Cleanup(self): | 
| # TODO(ngeoffray): We run out of space on the build bots for these tests if | 
| # the temp directories are not removed right after running the test. | 
| -    if not self.context.keep_temporary_files: self.run_arch.Cleanup() | 
| +    if not self.context.keep_temporary_files: | 
| +      self.run_arch.Cleanup() | 
|  | 
|  | 
| class MultiTestCase(StandardTestCase): | 
| +  """Multiple test cases defined within a single *Test.dart file.""" | 
|  | 
| def __init__(self, context, path, filename, kind, mode, arch): | 
| super(MultiTestCase, self).__init__(context, path, filename, mode, arch) | 
| self.kind = kind | 
|  | 
| def GetCommand(self): | 
| +    """Returns a commandline to execute to perform the test.""" | 
| return self.run_arch.GetRunCommand( | 
| -      fatal_static_type_errors=(self.kind == 'static type error')); | 
| +        fatal_static_type_errors=(self.kind == 'static type error')) | 
|  | 
| def IsNegative(self): | 
| +    """Determine if this is a negative test. by looking at @ directives. | 
| + | 
| +    A negative test is considered to pas if its outcome is FAIL. | 
| + | 
| +    Returns: | 
| +      True if this is a negative test. | 
| +    """ | 
| if self.kind == 'compile-time error': | 
| return True | 
| if self.kind == 'runtime error': | 
| @@ -80,16 +85,19 @@ class MultiTestCase(StandardTestCase): | 
| return self.run_arch.HasFatalTypeErrors() | 
| return False | 
|  | 
| + | 
| class BrowserTestCase(StandardTestCase): | 
| +  """A test case that executes inside a browser (or DumpRenderTree).""" | 
| + | 
| def __init__(self, context, path, filename, | 
| fatal_static_type_errors, mode, arch): | 
| super(BrowserTestCase, self).__init__(context, path, filename, mode, arch) | 
| self.fatal_static_type_errors = fatal_static_type_errors | 
|  | 
| - | 
| def Run(self): | 
| +    """Optionally compiles and then runs the specified test.""" | 
| command = self.run_arch.GetCompileCommand(self.fatal_static_type_errors) | 
| -    if command != None: | 
| +    if command: | 
| # We change the directory where dartc will be launched because | 
| # it is not predictable on the location of the compiled file. In | 
| # case the test is a web test, we make sure the app file is not | 
| @@ -103,7 +111,7 @@ class BrowserTestCase(StandardTestCase): | 
| if test_output.output.exit_code != 0: | 
| return test_output | 
|  | 
| -    command = self.run_arch.GetRunCommand(); | 
| +    command = self.run_arch.GetRunCommand() | 
| test_output = self.RunCommand(command) | 
| # The return value of DumpRenderedTree does not indicate test failing, but | 
| # the output does. | 
| @@ -114,7 +122,8 @@ class BrowserTestCase(StandardTestCase): | 
|  | 
|  | 
| class CompilationTestCase(test.TestCase): | 
| -  """ Run the dartc compiler on a given top level dart file """ | 
| +  """Run the dartc compiler on a given top level .dart file.""" | 
| + | 
| def __init__(self, path, context, filename, mode, arch): | 
| super(CompilationTestCase, self).__init__(context, path) | 
| self.filename = filename | 
| @@ -128,10 +137,11 @@ class CompilationTestCase(test.TestCase): | 
| return False | 
|  | 
| def GetLabel(self): | 
| -    return "%s/%s %s" % (self.mode, self.arch, '/'.join(self.path)) | 
| +    return '%s/%s %s' % (self.mode, self.arch, '/'.join(self.path)) | 
|  | 
| def GetCommand(self): | 
| -    cmd = self.context.GetDartC(self.mode, self.arch); | 
| +    """Returns a command line to run the test.""" | 
| +    cmd = self.context.GetDartC(self.mode, self.arch) | 
| cmd += self.context.flags | 
| cmd += ['-check-only', | 
| '-fatal-type-errors', | 
|  |