tests fixed

This commit is contained in:
nik
2012-03-06 18:02:49 +04:00
parent 10d8cc7daa
commit d5172ebeac
8 changed files with 89 additions and 195 deletions
@@ -3,20 +3,29 @@ package org.jetbrains.jps.incremental;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLogger;
import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLoggerImpl;
import org.jetbrains.jps.incremental.java.JavaBuilderLogger;
import org.jetbrains.jps.incremental.java.JavaBuilderLoggerImpl;
/**
* @author nik
*/
public class BuildLoggingManager {
public static final BuildLoggingManager DEFAULT = new BuildLoggingManager(new ArtifactBuilderLoggerImpl());
public static final BuildLoggingManager DEFAULT = new BuildLoggingManager(new ArtifactBuilderLoggerImpl(), new JavaBuilderLoggerImpl());
private ArtifactBuilderLogger myArtifactBuilderLogger;
private JavaBuilderLogger myJavaBuilderLogger;
public BuildLoggingManager(@NotNull ArtifactBuilderLogger artifactBuilderLogger) {
public BuildLoggingManager(@NotNull ArtifactBuilderLogger artifactBuilderLogger, @NotNull JavaBuilderLogger logger) {
myArtifactBuilderLogger = artifactBuilderLogger;
myJavaBuilderLogger = logger;
}
@NotNull
public ArtifactBuilderLogger getArtifactBuilderLogger() {
return myArtifactBuilderLogger;
}
@NotNull
public JavaBuilderLogger getJavaBuilderLogger() {
return myJavaBuilderLogger;
}
}
@@ -12,6 +12,7 @@ import org.jetbrains.jps.api.CanceledStatus;
import org.jetbrains.jps.api.RequestFuture;
import org.jetbrains.jps.incremental.java.ExternalJavacDescriptor;
import org.jetbrains.jps.incremental.java.JavaBuilder;
import org.jetbrains.jps.incremental.java.JavaBuilderLogger;
import org.jetbrains.jps.incremental.messages.BuildMessage;
import org.jetbrains.jps.incremental.messages.CompilerMessage;
import org.jetbrains.jps.incremental.messages.ProgressMessage;
@@ -321,7 +322,8 @@ public class IncProjectBuilder {
final Collection<String> outputs = sourceToOutputStorage.getState(deletedSource);
if (outputs != null) {
if (LOG.isDebugEnabled()) {
final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger();
if (logger.isEnabled()) {
if (outputs.size() > 0) {
final String[] buffer = new String[outputs.size()];
int i = 0;
@@ -329,11 +331,11 @@ public class IncProjectBuilder {
buffer[i++] = o;
}
Arrays.sort(buffer);
LOG.info("Cleaning output files:");
logger.log("Cleaning output files:");
for(final String o : buffer) {
LOG.info(o);
logger.log(o);
}
LOG.info("End of files");
logger.log("End of files");
}
}
@@ -450,7 +452,8 @@ public class IncProjectBuilder {
}
}
else {
LOG.info("Builder " + builder.getDescription() + " requested second chunk rebuild");
context.getLoggingManager().getJavaBuilderLogger().log(
"Builder " + builder.getDescription() + " requested second chunk rebuild");
}
}
@@ -490,8 +493,9 @@ public class IncProjectBuilder {
final Collection<String> outputs = srcToOut.getState(srcPath);
if (outputs != null) {
final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger();
for (String output : outputs) {
if (LOG.isDebugEnabled()) {
if (logger.isEnabled()) {
allOutputs.add(output);
}
FileUtil.delete(new File(output));
@@ -502,9 +506,10 @@ public class IncProjectBuilder {
}
});
if (LOG.isDebugEnabled()) {
final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger();
if (logger.isEnabled()) {
if (context.isMake() && allOutputs.size() > 0) {
LOG.info("Cleaning output files:");
logger.log("Cleaning output files:");
final String[] buffer = new String[allOutputs.size()];
int i = 0;
for (String output : allOutputs) {
@@ -512,9 +517,9 @@ public class IncProjectBuilder {
}
Arrays.sort(buffer);
for (String output : buffer) {
LOG.info(output);
logger.log(output);
}
LOG.info("End of files");
logger.log("End of files");
}
}
}
@@ -3,7 +3,6 @@ package org.jetbrains.jps.incremental.java;
import com.intellij.compiler.notNullVerification.NotNullVerifyingInstrumenter;
import com.intellij.execution.process.BaseOSProcessHandler;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.FileUtil;
@@ -46,8 +45,6 @@ import java.util.concurrent.TimeUnit;
* Date: 9/21/11
*/
public class JavaBuilder extends ModuleLevelBuilder {
private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.java.JavaBuilder");
public static final String BUILDER_NAME = "java";
private static final String JAVA_EXTENSION = ".java";
private static final String FORM_EXTENSION = ".form";
@@ -185,9 +182,10 @@ public class JavaBuilder extends ModuleLevelBuilder {
}
}
if (LOG.isDebugEnabled()) {
final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger();
if (logger.isEnabled()) {
if (filesToCompile.size() > 0 && context.isMake()) {
LOG.info("Compiling files:");
logger.log("Compiling files:");
final String[] buffer = new String[filesToCompile.size()];
int i = 0;
for (final File f : filesToCompile) {
@@ -195,9 +193,9 @@ public class JavaBuilder extends ModuleLevelBuilder {
}
Arrays.sort(buffer);
for (final String s : buffer) {
LOG.info(s);
logger.log(s);
}
LOG.info("End of files");
logger.log("End of files");
}
}
@@ -0,0 +1,9 @@
package org.jetbrains.jps.incremental.java;
/**
* @author nik
*/
public interface JavaBuilderLogger {
void log(String line);
boolean isEnabled();
}
@@ -0,0 +1,20 @@
package org.jetbrains.jps.incremental.java;
import com.intellij.openapi.diagnostic.Logger;
/**
* @author nik
*/
public class JavaBuilderLoggerImpl implements JavaBuilderLogger {
private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.java.JavaBuilderLoggerImpl");
@Override
public void log(String line) {
LOG.debug(line);
}
@Override
public boolean isEnabled() {
return LOG.isDebugEnabled();
}
}
@@ -16,21 +16,18 @@
package org.jetbrains.ether;
import com.intellij.openapi.application.ex.PathManagerEx;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import junit.framework.TestCase;
import org.apache.log4j.Level;
import org.apache.log4j.PropertyConfigurator;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.Project;
import org.jetbrains.jps.Sdk;
import org.jetbrains.jps.api.CanceledStatus;
import org.jetbrains.jps.artifacts.Artifact;
import org.jetbrains.jps.idea.IdeaProjectLoader;
import org.jetbrains.jps.incremental.*;
import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLoggerImpl;
import org.jetbrains.jps.incremental.java.JavaBuilderLogger;
import org.jetbrains.jps.incremental.storage.BuildDataManager;
import org.jetbrains.jps.incremental.storage.ProjectTimestamps;
import org.jetbrains.jps.server.ClasspathBootstrap;
@@ -40,104 +37,15 @@ import java.io.*;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
/**
* @author db
* @since 26.07.11
*/
public abstract class IncrementalTestCase extends TestCase {
private static class RootStripper {
private String root;
void setRoot(final String root) {
this.root = root;
}
String strip(final String s) {
if (s.startsWith(root)) {
return s.substring(root.length());
}
return s;
}
}
static VolatileFileAppender myAppender = null;
static void setAppender (final VolatileFileAppender app) {
myAppender = app;
}
static void closeAppender () {
if (myAppender != null) {
try {
myAppender.closeStream();
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
}
private static class MyFactory implements Logger.Factory {
@Override
public Logger getLoggerInstance(String category) {
final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(category);
final boolean affectedLogger = category.equals("#org.jetbrains.jps.incremental.java.JavaBuilder") ||
category.equals("#org.jetbrains.jps.incremental.IncProjectBuilder");
return new Logger() {
@Override
public boolean isDebugEnabled() {
return affectedLogger;
}
@Override
public void debug(@NonNls String message) {
}
@Override
public void debug(@Nullable Throwable t) {
}
@Override
public void debug(@NonNls String message, @Nullable Throwable t) {
}
@Override
public void error(@NonNls String message, @Nullable Throwable t, @NonNls String... details) {
}
@Override
public void info(@NonNls String message) {
if (affectedLogger) {
logger.info(stripper.strip(message));
}
}
@Override
public void info(@NonNls String message, @Nullable Throwable t) {
}
@Override
public void warn(@NonNls String message, @Nullable Throwable t) {
}
@Override
public void setLevel(Level level) {
}
};
}
}
private static RootStripper stripper = new RootStripper();
private final String groupName;
private final String tempDir = FileUtil.toSystemDependentName(new File(System.getProperty("java.io.tmpdir")).getCanonicalPath());
private Logger.Factory oldFactory;
private String baseDir;
private String workDir;
@@ -149,9 +57,6 @@ public abstract class IncrementalTestCase extends TestCase {
@Override
protected void setUp() throws Exception {
oldFactory = Logger.ourFactory;
Logger.setFactory(new MyFactory());
super.setUp();
baseDir = PathManagerEx.getTestDataPath() + File.separator + "compileServer" + File.separator + "incremental" + File.separator;
@@ -175,13 +80,7 @@ public abstract class IncrementalTestCase extends TestCase {
super.tearDown();
}
finally {
try {
closeAppender();
delete(new File(workDir));
}
finally {
Logger.setFactory(oldFactory);
}
delete(new File(workDir));
}
}
@@ -289,23 +188,7 @@ public abstract class IncrementalTestCase extends TestCase {
}
}
private void initLoggers() {
final Properties properties = new Properties();
properties.setProperty("log4j.rootCategory", "INFO, A1");
properties.setProperty("log4j.appender.A1", "org.jetbrains.ether.VolatileFileAppender");
properties.setProperty("log4j.appender.A1.file", getWorkDir() + ".log");
properties.setProperty("log4j.appender.A1.layout", "org.apache.log4j.PatternLayout");
properties.setProperty("log4j.appender.A1.layout.ConversionPattern", "%m%n");
PropertyConfigurator.configure(properties);
}
public void doTest() throws Exception {
stripper.setRoot(FileUtil.toSystemIndependentName(getWorkDir() + File.separator));
initLoggers();
final String projectPath = getWorkDir() + File.separator + ".idea";
final Project project = new Project();
@@ -319,11 +202,11 @@ public abstract class IncrementalTestCase extends TestCase {
IdeaProjectLoader.loadFromPath(project, projectPath, "");
final File dataStorageRoot = Paths.getDataStorageRoot(project);
final TestJavaBuilderLogger javaBuilderLogger = new TestJavaBuilderLogger(FileUtil.toSystemIndependentName(getWorkDir() + File.separator));
final ProjectDescriptor projectDescriptor =
new ProjectDescriptor(project, new FSState(true), new ProjectTimestamps(dataStorageRoot),
new BuildDataManager(dataStorageRoot, true), BuildLoggingManager.DEFAULT);
new BuildDataManager(dataStorageRoot, true), new BuildLoggingManager(new ArtifactBuilderLoggerImpl(), javaBuilderLogger));
try {
new IncProjectBuilder(
projectDescriptor, BuilderRegistry.getInstance(), Collections.<String, String>emptyMap(), CanceledStatus.NULL
).build(
@@ -343,11 +226,31 @@ public abstract class IncrementalTestCase extends TestCase {
);
final String expected = StringUtil.convertLineSeparators(FileUtil.loadFile(new File(getBaseDir() + ".log")));
final String actual = StringUtil.convertLineSeparators(FileUtil.loadFile(new File(getWorkDir() + ".log")));
final String actual = javaBuilderLogger.myLog.toString();
assertEquals(expected, actual);
}
finally {
projectDescriptor.release();
}
}
private static class TestJavaBuilderLogger implements JavaBuilderLogger {
private final String myRoot;
private final StringBuilder myLog;
public TestJavaBuilderLogger(String root) {
myRoot = root;
myLog = new StringBuilder();
}
@Override
public void log(String line) {
myLog.append(StringUtil.trimStart(line, myRoot)).append('\n');
}
@Override
public boolean isEnabled() {
return true;
}
}
}
@@ -1,52 +0,0 @@
/*
* 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 org.apache.log4j.FileAppender;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
/**
* Created with IntelliJ IDEA.
* User: db
* Date: 02.02.12
* Time: 18:27
* To change this template use File | Settings | File Templates.
*/
public class VolatileFileAppender extends FileAppender {
private OutputStream myStream = null;
public VolatileFileAppender() {
super();
IncrementalTestCase.setAppender(this);
}
void closeStream () throws IOException {
if (myStream != null){
myStream.close();
myStream = null;
}
}
@Override
protected OutputStreamWriter createWriter(final OutputStream os) {
myStream = os;
return super.createWriter(os);
}
}
@@ -29,6 +29,7 @@ import org.jetbrains.jps.Project;
import org.jetbrains.jps.api.CanceledStatus;
import org.jetbrains.jps.artifacts.Artifact;
import org.jetbrains.jps.incremental.*;
import org.jetbrains.jps.incremental.java.JavaBuilderLoggerImpl;
import org.jetbrains.jps.incremental.messages.BuildMessage;
import org.jetbrains.jps.incremental.storage.BuildDataManager;
import org.jetbrains.jps.incremental.storage.ProjectTimestamps;
@@ -143,7 +144,8 @@ public abstract class ArtifactBuilderTestCase extends UsefulTestCase {
final File dataStorageRoot = Paths.getDataStorageRoot(myProject);
ProjectTimestamps timestamps = new ProjectTimestamps(dataStorageRoot);
BuildDataManager dataManager = new BuildDataManager(dataStorageRoot, true);
return new ProjectDescriptor(myProject, new FSState(true), timestamps, dataManager, new BuildLoggingManager(myArtifactBuilderLogger));
return new ProjectDescriptor(myProject, new FSState(true), timestamps, dataManager, new BuildLoggingManager(myArtifactBuilderLogger,
new JavaBuilderLoggerImpl()));
}
catch (IOException e) {
throw new RuntimeException(e);