package org.elixir_lang.jps; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.incremental.MessageHandler; import org.jetbrains.jps.incremental.messages.BuildMessage; import org.jetbrains.jps.incremental.messages.DoneSomethingNotification; import org.junit.Assert; import java.util.ArrayList; import java.util.List; /** * Created by zyuyou on 15/7/17. */ public class BuildResult implements MessageHandler { private final List<BuildMessage> myErrorMessages; private final List<BuildMessage> myWarnMessages; private final List<BuildMessage> myInfoMessages; private boolean myUpToDate = true; public BuildResult(){ myErrorMessages = new ArrayList<BuildMessage>(); myWarnMessages = new ArrayList<BuildMessage>(); myInfoMessages = new ArrayList<BuildMessage>(); } @Override public void processMessage(BuildMessage msg) { if(msg.getKind() == BuildMessage.Kind.ERROR){ myErrorMessages.add(msg); myUpToDate = false; }else if(msg.getKind() == BuildMessage.Kind.WARNING){ myWarnMessages.add(msg); }else { myInfoMessages.add(msg); } if(msg instanceof DoneSomethingNotification){ myUpToDate = false; } } public void assertUpToDate() { Assert.assertTrue("Project sources weren't up to date", myUpToDate); } public void assertFailed() { Assert.assertFalse("Build not failed as expected", isSuccessful()); } public boolean isSuccessful(){ return myErrorMessages.isEmpty(); } public void assertSuccessful(){ Function<BuildMessage, String> toStringFunction = StringUtil.createToStringFunction(BuildMessage.class); Assert.assertTrue("Build failed. \nErrors:\n" + StringUtil.join(myErrorMessages, toStringFunction, "\n") + "\nInfo messages:\n" + StringUtil.join(myInfoMessages, toStringFunction, "\n"), isSuccessful()); } @NotNull public List<BuildMessage> getMessages(@NotNull BuildMessage.Kind kind){ if(kind == BuildMessage.Kind.ERROR) return myErrorMessages; else if(kind == BuildMessage.Kind.WARNING) return myWarnMessages; else return myInfoMessages; } }