Index: dart/compiler/javatests/com/google/dart/corelib/SharedTestCase.java |
diff --git a/dart/compiler/javatests/com/google/dart/corelib/SharedTestCase.java b/dart/compiler/javatests/com/google/dart/corelib/SharedTestCase.java |
deleted file mode 100644 |
index 47054d70d3d3ff4ddd6f08dabc85c27a74c36c08..0000000000000000000000000000000000000000 |
--- a/dart/compiler/javatests/com/google/dart/corelib/SharedTestCase.java |
+++ /dev/null |
@@ -1,285 +0,0 @@ |
-// Copyright (c) 2012, 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. |
- |
-package com.google.dart.corelib; |
- |
-import com.google.dart.compiler.AnalysisError; |
-import com.google.dart.compiler.CommandLineOptions.CompilerOptions; |
-import com.google.dart.compiler.CompilerConfiguration; |
-import com.google.dart.compiler.DartArtifactProvider; |
-import com.google.dart.compiler.DartCompilationError; |
-import com.google.dart.compiler.DartCompiler; |
-import com.google.dart.compiler.DartCompilerListener; |
-import com.google.dart.compiler.DefaultCompilerConfiguration; |
-import com.google.dart.compiler.DefaultDartArtifactProvider; |
-import com.google.dart.compiler.DefaultLibrarySource; |
-import com.google.dart.compiler.ErrorSeverity; |
-import com.google.dart.compiler.LibrarySource; |
-import com.google.dart.compiler.Source; |
-import com.google.dart.compiler.SubSystem; |
-import com.google.dart.compiler.UrlLibrarySource; |
- |
-import junit.framework.AssertionFailedError; |
-import junit.framework.Test; |
-import junit.framework.TestCase; |
-import junit.framework.TestSuite; |
- |
-import org.kohsuke.args4j.CmdLineException; |
-import org.kohsuke.args4j.CmdLineParser; |
- |
-import java.io.ByteArrayOutputStream; |
-import java.io.CharArrayReader; |
-import java.io.CharArrayWriter; |
-import java.io.File; |
-import java.io.IOException; |
-import java.io.PrintStream; |
-import java.io.Reader; |
-import java.io.Writer; |
-import java.net.URI; |
-import java.util.ArrayList; |
-import java.util.Arrays; |
-import java.util.Enumeration; |
-import java.util.HashSet; |
-import java.util.List; |
-import java.util.Set; |
-import java.util.concurrent.ConcurrentHashMap; |
-import java.util.concurrent.atomic.AtomicInteger; |
-import java.util.regex.Pattern; |
- |
-/** |
- * Wrapper around test that are shared between compiler and runtime (test.py). |
- * <p> |
- * Sometimes, when fixing a known issue, a test that was previously crashing or failing may start |
- * passing. This will show up as a test failure because the status file has wrong information. |
- * Please update the status file. |
- */ |
-public abstract class SharedTestCase extends TestCase { |
- private static final Pattern SEPARATOR = Pattern.compile("\\t"); |
- |
- private final Set<String> outcomes; |
- private final boolean isNegative; |
- private final String[] arguments; |
- private final boolean regularCompile; |
- private final AtomicInteger compilationErrorCount = new AtomicInteger(0); |
- private final AtomicInteger typeErrorCount = new AtomicInteger(0); |
- private final AtomicInteger warningCount = new AtomicInteger(0); |
- |
- SharedTestCase(String name, Set<String> outcomes, boolean isNegative, boolean regularCompile, |
- String[] arguments) { |
- super(name); |
- this.outcomes = outcomes; |
- this.isNegative = isNegative; |
- this.regularCompile = regularCompile; |
- this.arguments = arguments; |
- } |
- |
- /** |
- * This constructor is provided for compatibility with Eclipse (for running |
- * a single test case). |
- */ |
- public SharedTestCase(String name) { |
- super(name = scrubName(name)); |
- TestSuite suite = SharedTests.suite(); |
- Enumeration<Test> tests = suite.tests(); |
- SharedTestCase test = null; |
- while (tests.hasMoreElements()) { |
- SharedTestCase current = (SharedTestCase) tests.nextElement(); |
- if (current.getScrubbedName().equals(name)) { |
- test = current; |
- break; |
- } |
- } |
- if (test == null) { |
- throw new IllegalArgumentException("Test '" +name + "' was not found."); |
- } |
- this.outcomes = test.outcomes; |
- this.isNegative = test.isNegative; |
- this.regularCompile = test.regularCompile; |
- this.arguments = test.arguments; |
- } |
- |
- private static String scrubName(String name) { |
- int i = name.indexOf('['); |
- if (i == -1) { |
- return name; |
- } |
- return name.substring(0, i - 1); |
- } |
- |
- @Override |
- public String getName() { |
- List<String> remarks = new ArrayList<String>(); |
- if (isNegative) { |
- remarks.add("negative"); |
- } |
- for (String outcome : outcomes) { |
- if (!outcome.equals("pass")) { |
- remarks.add(outcome); |
- } |
- } |
- if (remarks.isEmpty()) { |
- return super.getName(); |
- } else { |
- return super.getName() + " " + remarks; |
- } |
- } |
- |
- String getScrubbedName() { |
- return super.getName(); |
- } |
- |
- @Override |
- public void runBare() { |
- ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); |
- PrintStream outputStream = new PrintStream(byteOutput); |
- try { |
- invokeCompiler(); |
- } catch (AnalysisError e) { |
- outputStream.close(); |
- analyzeError(e, byteOutput.toString()); |
- return; |
- } catch (Throwable t) { |
- outputStream.close(); |
- analyzeCrash(t); |
- return; |
- } |
- outputStream.close(); |
- analyzeNormalCompletion(); |
- } |
- |
- private void invokeCompiler() throws CmdLineException, IOException, AnalysisError { |
- CmdLineParser cmdLineParser = null; |
- CompilerOptions compilerOptions = new CompilerOptions(); |
- cmdLineParser = new CmdLineParser(compilerOptions); |
- cmdLineParser.parseArgument(arguments); |
- CompilerConfiguration config = new DefaultCompilerConfiguration(compilerOptions); |
- DartArtifactProvider provider = getArtifactProvider(config.getOutputDirectory()); |
- DartCompilerListener listener = getListener(); |
- List<String> sourceFiles = compilerOptions.getSourceFiles(); |
- assertEquals("incorrect number of source files " + sourceFiles, 1, sourceFiles.size()); |
- File sourceFile = new File(sourceFiles.get(0)); |
- LibrarySource lib; |
- if (sourceFile.getName().endsWith(".dart")) { |
- lib = new DefaultLibrarySource(sourceFile, null); |
- } else { |
- lib = new UrlLibrarySource(sourceFile); |
- } |
- DartCompiler.compileLib(lib, config, provider, listener); |
- if (compilationErrorCount.get() != 0 || typeErrorCount.get() != 0 || warningCount.get() != 0) { |
- throw new AnalysisError(sourceFile.getPath()); |
- } |
- } |
- |
- private DartArtifactProvider getArtifactProvider(File outputDirectory) { |
- final DartArtifactProvider provider = new DefaultDartArtifactProvider(outputDirectory); |
- return new DartArtifactProvider() { |
- ConcurrentHashMap<URI, CharArrayWriter> artifacts = |
- new ConcurrentHashMap<URI, CharArrayWriter>(); |
- |
- @Override |
- public boolean isOutOfDate(Source source, Source base, String extension) { |
- return true; |
- } |
- |
- @Override |
- public Writer getArtifactWriter(Source source, String part, String extension) { |
- URI uri = getArtifactUri(source, part, extension); |
- CharArrayWriter writer = new CharArrayWriter(); |
- CharArrayWriter existing = artifacts.putIfAbsent(uri, writer); |
- return (existing == null) ? writer : existing; |
- } |
- |
- |
- @Override |
- public URI getArtifactUri(Source source, String part, String extension) { |
- return provider.getArtifactUri(source, part, extension); |
- } |
- |
- @Override |
- public Reader getArtifactReader(Source source, String part, String extension) |
- throws IOException { |
- URI uri = getArtifactUri(source, part, extension); |
- CharArrayWriter writer = artifacts.get(uri); |
- if (writer != null) { |
- return new CharArrayReader(writer.toCharArray()); |
- } |
- return provider.getArtifactReader(source, part, extension); |
- } |
- }; |
- } |
- |
- private DartCompilerListener getListener() { |
- DartCompilerListener listener = new DartCompilerListener.Empty() { |
- @Override |
- public void onError(DartCompilationError event) { |
- if (event.getErrorCode().getSubSystem() == SubSystem.STATIC_TYPE) { |
- typeErrorCount.incrementAndGet(); |
- } else if (event.getErrorCode().getErrorSeverity() == ErrorSeverity.ERROR) { |
- compilationErrorCount.incrementAndGet(); |
- } else if (event.getErrorCode().getErrorSeverity() == ErrorSeverity.WARNING) { |
- warningCount.incrementAndGet(); |
- } |
- maybeThrow(event); |
- } |
- |
- private void maybeThrow(DartCompilationError event) { |
- if (isNegative) { |
- return; |
- } |
- if (outcomes.contains("pass")) { |
- // It is easier to debug a failing regular test if we throw an exception. |
- throw new AssertionError(event); |
- } |
- } |
- }; |
- return listener; |
- } |
- |
- private void analyzeNormalCompletion() { |
- if (isNegative) { |
- if (!outcomes.contains("fail")) { |
- fail("Negative test didn't cause an error"); |
- } |
- } else { |
- if (!outcomes.contains("pass")) { |
- fail("Test passed unexpectly, please update status file"); |
- } |
- } |
- } |
- |
- private void analyzeCrash(Throwable t) { |
- if (outcomes.contains("crash")) { |
- return; |
- } |
- String message = outcomes.contains("fail") ? "Failing test crashed" : "Test crashed unexpectly"; |
- AssertionFailedError error = new AssertionFailedError(message); |
- error.initCause(t); |
- throw error; |
- } |
- |
- private void analyzeError(AnalysisError e, String log) { |
- if (isNegative) { |
- if (!outcomes.contains("pass")) { |
- fail("Negative test is passing, please update status file"); |
- } |
- } else { |
- if (!outcomes.contains("fail")) { |
- fail(log + e.getLocalizedMessage()); |
- } |
- } |
- } |
- |
- static Test getInstance(String line, boolean regularCompile) { |
- String[] fields = SEPARATOR.split(line); |
- if (fields.length <= 3) { |
- fail("Line is not parsable: " + line); |
- } |
- String name = fields[0]; |
- Set<String> outcomes = new HashSet<String>(Arrays.<String>asList(fields[1].split(","))); |
- boolean isNegative = fields[2].equals("True"); |
- String[] arguments = new String[fields.length - 3]; |
- System.arraycopy(fields, 3, arguments, 0, arguments.length); |
- return new SharedTestCase(name, outcomes, isNegative, regularCompile, arguments) {}; |
- } |
-} |