From fd71801191dc00e93c1c1fca3942897cc01083cc Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Sat, 28 Jan 2012 00:49:38 +0400 Subject: [PATCH] Retooling incremental tests to the new builders (compiler server). --- jps/jps-builders/jps-builders.iml | 11 + .../org/jetbrains/jps/api/CanceledStatus.java | 7 + .../jps/incremental/ModuleLevelBuilder.java | 5 - .../jetbrains/ether/IncrementalTestCase.java | 246 ++++++++++++++++++ .../org/jetbrains/ether/TestAnnotations.java | 0 .../jetbrains/ether/TestClassModifiers.java | 0 .../jetbrains/ether/TestClassProperties.java | 0 .../org/jetbrains/ether/TestClassRename.java | 0 .../org/jetbrains/ether/TestCommon.java | 0 .../jetbrains/ether/TestFieldModifiers.java | 0 .../jetbrains/ether/TestFieldProperties.java | 0 .../org/jetbrains/ether/TestGenerics.java | 0 .../org/jetbrains/ether/TestMarkDirty.java | 0 .../jetbrains/ether/TestMembersChange.java | 0 .../jetbrains/ether/TestMethodModifiers.java | 0 .../jetbrains/ether/TestMethodProperties.java | 0 .../org/jetbrains/ether/TestPackageInfo.java | 0 .../ether/dependencyView/Mappings.java | 1 - .../jetbrains/ether/IncrementalTestCase.java | 170 ------------ 19 files changed, 264 insertions(+), 176 deletions(-) create mode 100644 jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestAnnotations.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestClassModifiers.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestClassProperties.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestClassRename.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestCommon.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestFieldModifiers.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestFieldProperties.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestGenerics.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestMarkDirty.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestMembersChange.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestMethodModifiers.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestMethodProperties.java (100%) rename jps/{ => jps-builders}/testSrc/org/jetbrains/ether/TestPackageInfo.java (100%) delete mode 100644 jps/testSrc/org/jetbrains/ether/IncrementalTestCase.java diff --git a/jps/jps-builders/jps-builders.iml b/jps/jps-builders/jps-builders.iml index 2a58ff7ae66d..bcbc6d67133d 100644 --- a/jps/jps-builders/jps-builders.iml +++ b/jps/jps-builders/jps-builders.iml @@ -4,6 +4,7 @@ + @@ -32,6 +33,16 @@ + + + + + + + + + + diff --git a/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java b/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java index d97759a183e1..b03a399379bf 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java +++ b/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java @@ -5,5 +5,12 @@ package org.jetbrains.jps.api; * Date: 1/13/12 */ public interface CanceledStatus { + CanceledStatus NULL = new CanceledStatus() { + @Override + public boolean isCanceled() { + return false; + } + }; + boolean isCanceled(); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java index 314187fa1100..fbd250eaa5bf 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java @@ -71,19 +71,14 @@ public abstract class ModuleLevelBuilder extends Builder { if (LOG.isDebugEnabled()) { LOG.debug("Differentiate Results:"); - LOG.debug(" Compiled Files:"); - for (final File c : allCompiledFiles) { LOG.debug(" " + c.getAbsolutePath()); } - LOG.debug(" Affected Files:"); - for (final File c : allAffectedFiles) { LOG.debug(" " + c.getAbsolutePath()); } - LOG.debug("End Of Differentiate Results."); } diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java new file mode 100644 index 000000000000..923de0d09adc --- /dev/null +++ b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java @@ -0,0 +1,246 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.ether; + +import com.intellij.openapi.diagnostic.Logger; +import junit.framework.TestCase; +import junitx.framework.FileAssert; +import org.apache.log4j.Level; +import org.apache.log4j.xml.DOMConfigurator; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jps.Project; +import org.jetbrains.jps.api.CanceledStatus; +import org.jetbrains.jps.idea.IdeaProjectLoader; +import org.jetbrains.jps.incremental.AllProjectScope; +import org.jetbrains.jps.incremental.BuilderRegistry; +import org.jetbrains.jps.incremental.FSState; +import org.jetbrains.jps.incremental.IncProjectBuilder; +import org.jetbrains.jps.incremental.storage.BuildDataManager; +import org.jetbrains.jps.incremental.storage.ProjectTimestamps; +import org.jetbrains.jps.server.ProjectDescriptor; + +import java.io.*; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 26.07.11 + * Time: 0:34 + * To change this template use File | Settings | File Templates. + */ +public abstract class IncrementalTestCase extends TestCase { + private final String groupName; + private final String tempDir = System.getProperty("java.io.tmpdir"); + + private String baseDir; + private String workDir; + + protected IncrementalTestCase(final String name) throws Exception { + super(name); + groupName = name; + } + + @Override + protected void setUp() throws Exception { + baseDir = "jps/testData" + File.separator + "incremental" + File.separator; + + for (int i = 0; ; i++) { + final File tmp = new File(tempDir + File.separator + "__temp__" + i); + if (tmp.mkdir()) { + workDir = tmp.getPath() + File.separator; + break; + } + } + + copy(new File(getBaseDir()), new File(getWorkDir())); + } + + @Override + protected void tearDown() throws Exception { +// delete(new File(workDir)); + } + + private String getDir(final String prefix) { + final String name = getName(); + + assert (name.startsWith("test")); + + final String result = Character.toLowerCase(name.charAt("test".length())) + name.substring("test".length() + 1); + + return prefix + File.separator + groupName + File.separator + result; + } + + private String getBaseDir() { + return getDir(baseDir); + } + + private String getWorkDir() { + return getDir(workDir); + } + + private void delete(final File file) throws Exception { + if (file.isDirectory()) { + for (File f : file.listFiles()) { + delete(f); + } + } + + if (!file.delete()) throw new IOException("could not delete file or directory " + file.getPath()); + + } + + private void copy(final File input, final File output) throws Exception { + if (input.isDirectory()) { + if (output.mkdirs()) { + for (File f : input.listFiles()) { + copy(f, new File(output.getPath() + File.separator + f.getName())); + } + } + else { + throw new IOException("unable to create directory " + output.getPath()); + } + } + else if (input.isFile()) { + final FileReader in = new FileReader(input); + final FileWriter out = new FileWriter(output); + int c; + + while ((c = in.read()) != -1) out.write(c); + + in.close(); + out.close(); + } + } + + private void modify() throws Exception { + final File dir = new File(getBaseDir()); + final File[] files = dir.listFiles(new FileFilter() { + public boolean accept(final File pathname) { + final String name = pathname.getName(); + + return name.endsWith(".java.new") || name.endsWith(".java.remove"); + } + }); + + for (File input : files) { + final String name = input.getName(); + + final boolean copy = name.endsWith(".java.new"); + final String postfix = name.substring(0, name.length() - (copy ? ".new" : ".remove").length()); + final int pathSep = postfix.indexOf("$"); + final String basename = pathSep == -1 ? postfix : postfix.substring(pathSep + 1); + final String path = + getWorkDir() + File.separator + (pathSep == -1 ? "src" : postfix.substring(0, pathSep).replace('-', File.separatorChar)); + final File output = new File(path + File.separator + basename); + + if (copy) { + copy(input, output); + } + else { + output.delete(); + } + } + } + + private void initLoggers() { + final String logFile = getWorkDir() + File.separator + "log.xml"; + + if (new File(logFile).exists()) { + DOMConfigurator.configure(logFile); + } + + Logger.setFactory(new Logger.Factory() { + @Override + public Logger getLoggerInstance(String category) { + final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(category); + + return new Logger() { + @Override + public boolean isDebugEnabled() { + return logger.isDebugEnabled(); + } + + @Override + public void debug(@NonNls String message) { + logger.debug(message); + } + + @Override + public void debug(@Nullable Throwable t) { + logger.debug("", t); + } + + @Override + public void debug(@NonNls String message, @Nullable Throwable t) { + logger.debug(message, t); + } + + @Override + public void error(@NonNls String message, @Nullable Throwable t, @NonNls String... details) { + logger.debug(message, t); + } + + @Override + public void info(@NonNls String message) { + logger.info(message); + } + + @Override + public void info(@NonNls String message, @Nullable Throwable t) { + logger.info(message, t); + } + + @Override + public void warn(@NonNls String message, @Nullable Throwable t) { + logger.warn(message, t); + } + + @Override + public void setLevel(Level level) { + logger.setLevel(level); + } + }; + } + }); + } + + public void doTest() throws Exception { + initLoggers(); + + final String projectPath = getWorkDir() + File.separator + ".idea"; + final Project project = new Project(); + + IdeaProjectLoader.loadFromPath(project, projectPath, ""); + + final ProjectDescriptor projectDescriptor = + new ProjectDescriptor(projectPath, project, new FSState(true), new ProjectTimestamps(projectPath), + new BuildDataManager(projectPath, true)); + final IncProjectBuilder builder = new IncProjectBuilder(projectDescriptor, BuilderRegistry.getInstance(), CanceledStatus.NULL); + + builder.build(new AllProjectScope(project, true), false, true); + + Thread.sleep(1000); + + modify(); + + builder.build(new AllProjectScope(project, false), true, false); + + projectDescriptor.release(); + + FileAssert.assertEquals(new File(getBaseDir() + ".log"), new File(getWorkDir() + ".log")); + } +} diff --git a/jps/testSrc/org/jetbrains/ether/TestAnnotations.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestAnnotations.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestAnnotations.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestAnnotations.java diff --git a/jps/testSrc/org/jetbrains/ether/TestClassModifiers.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestClassModifiers.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestClassModifiers.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestClassModifiers.java diff --git a/jps/testSrc/org/jetbrains/ether/TestClassProperties.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestClassProperties.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestClassProperties.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestClassProperties.java diff --git a/jps/testSrc/org/jetbrains/ether/TestClassRename.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestClassRename.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestClassRename.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestClassRename.java diff --git a/jps/testSrc/org/jetbrains/ether/TestCommon.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestCommon.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestCommon.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestCommon.java diff --git a/jps/testSrc/org/jetbrains/ether/TestFieldModifiers.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestFieldModifiers.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestFieldModifiers.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestFieldModifiers.java diff --git a/jps/testSrc/org/jetbrains/ether/TestFieldProperties.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestFieldProperties.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestFieldProperties.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestFieldProperties.java diff --git a/jps/testSrc/org/jetbrains/ether/TestGenerics.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestGenerics.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestGenerics.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestGenerics.java diff --git a/jps/testSrc/org/jetbrains/ether/TestMarkDirty.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestMarkDirty.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestMarkDirty.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestMarkDirty.java diff --git a/jps/testSrc/org/jetbrains/ether/TestMembersChange.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestMembersChange.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestMembersChange.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestMembersChange.java diff --git a/jps/testSrc/org/jetbrains/ether/TestMethodModifiers.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestMethodModifiers.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestMethodModifiers.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestMethodModifiers.java diff --git a/jps/testSrc/org/jetbrains/ether/TestMethodProperties.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestMethodProperties.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestMethodProperties.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestMethodProperties.java diff --git a/jps/testSrc/org/jetbrains/ether/TestPackageInfo.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestPackageInfo.java similarity index 100% rename from jps/testSrc/org/jetbrains/ether/TestPackageInfo.java rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestPackageInfo.java diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index 16846ac8e8f2..8163e56cfee6 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -1436,7 +1436,6 @@ public class Mappings { } debug("Dependent file: ", depFile); - final Collection depClusters = mySourceFileToUsages.get(depFile); for (UsageRepr.Cluster depCluster : depClusters) { diff --git a/jps/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/testSrc/org/jetbrains/ether/IncrementalTestCase.java deleted file mode 100644 index 4ba1e8b395ee..000000000000 --- a/jps/testSrc/org/jetbrains/ether/IncrementalTestCase.java +++ /dev/null @@ -1,170 +0,0 @@ -package org.jetbrains.ether; - -import junit.framework.TestCase; -import junitx.framework.FileAssert; -import org.jetbrains.ether.dependencyView.Mappings; - -import java.io.*; - -/** - * Created by IntelliJ IDEA. - * User: db - * Date: 26.07.11 - * Time: 0:34 - * To change this template use File | Settings | File Templates. - */ -public abstract class IncrementalTestCase extends TestCase { - private final String groupName; - private final String tempDir = System.getProperty("java.io.tmpdir"); - - private String baseDir; - private String workDir; - - protected IncrementalTestCase(final String name) throws Exception { - super(name); - groupName = name; - } - - @Override - protected void setUp() throws Exception { - baseDir = "jps/testData" + File.separator + "incremental" + File.separator; - - for (int i = 0; ; i++) { - final File tmp = new File(tempDir + File.separator + "__temp__" + i); - if (tmp.mkdir()) { - workDir = tmp.getPath() + File.separator; - break; - } - } - - copy(new File(getBaseDir()), new File(getWorkDir())); - } - - @Override - protected void tearDown() throws Exception { -// delete(new File(workDir)); - } - - private String getDir(final String prefix) { - final String name = getName(); - - assert (name.startsWith("test")); - - final String result = Character.toLowerCase(name.charAt("test".length())) + name.substring("test".length() + 1); - - return prefix + File.separator + groupName + File.separator + result; - } - - private String getBaseDir() { - return getDir(baseDir); - } - - private String getWorkDir() { - return getDir(workDir); - } - - private void delete(final File file) throws Exception { - if (file.isDirectory()) { - for (File f : file.listFiles()) { - delete(f); - } - } - - if (!file.delete()) throw new IOException("could not delete file or directory " + file.getPath()); - - } - - private void copy(final File input, final File output) throws Exception { - if (input.isDirectory()) { - if (output.mkdirs()) { - for (File f : input.listFiles()) { - copy(f, new File(output.getPath() + File.separator + f.getName())); - } - } - else { - throw new IOException("unable to create directory " + output.getPath()); - } - } - else if (input.isFile()) { - final FileReader in = new FileReader(input); - final FileWriter out = new FileWriter(output); - int c; - - while ((c = in.read()) != -1) out.write(c); - - in.close(); - out.close(); - } - } - - private void modify() throws Exception { - final File dir = new File(getBaseDir()); - final File[] files = dir.listFiles(new FileFilter() { - public boolean accept(final File pathname) { - final String name = pathname.getName(); - - return name.endsWith(".java.new") || name.endsWith(".java.remove"); - } - }); - - for (File input : files) { - final String name = input.getName(); - - final boolean copy = name.endsWith(".java.new"); - final String postfix = name.substring(0, name.length() - (copy ? ".new" : ".remove").length()); - final int pathSep = postfix.indexOf("$"); - final String basename = pathSep == -1 ? postfix : postfix.substring(pathSep + 1); - final String path = - getWorkDir() + File.separator + (pathSep == -1 ? "src" : postfix.substring(0, pathSep).replace('-', File.separatorChar)); - final File output = new File(path + File.separator + basename); - - if (copy) { - copy(input, output); - } - else { - output.delete(); - } - } - } - - public void doTest() throws Exception { - final ProjectWrapper first = ProjectWrapper.load(getWorkDir(), "project.builder.useInProcessJavac=true", false); - - first.rebuild(); - first.save(); - - Thread.sleep(1000); - - modify(); - - final ProjectWrapper second = ProjectWrapper.load(getWorkDir(), "project.builder.useInProcessJavac=true", true); - - final PrintStream stream = new PrintStream(new FileOutputStream(getWorkDir() + ".log"), true); - - try { - second.makeModule(null, new ProjectWrapper.Flags() { - public boolean tests() { - return false; - } - - public boolean incremental() { - return true; - } - - public boolean force() { - return false; - } - - public PrintStream logStream() { - return stream; - } - }); - - } - finally { - stream.close(); - } - - FileAssert.assertEquals(new File(getBaseDir() + ".log"), new File(getWorkDir() + ".log")); - } -}