diff --git a/build.sbt b/build.sbt index 24827fde3a1a..190604a807d7 100644 --- a/build.sbt +++ b/build.sbt @@ -1694,7 +1694,7 @@ lazy val testkit = project Compile / exportedModule := (Compile / exportedModuleBin).value, Compile / exportedModuleBin := (Compile / packageBin).value ) - .dependsOn(`logging-service-logback`) + .dependsOn(`logging-service-logback` % "compile->test") .dependsOn(`runtime-utils`) lazy val searcher = project @@ -2726,6 +2726,7 @@ lazy val `runtime-integration-tests` = "-Dtck.inlineVerifierInstrument=false", "-Dpolyglot.engine.AllowExperimentalOptions=true" ), + Test / javacOptions += "-implicit:none", Test / javaOptions ++= testLogProviderOptions, Test / moduleDependencies := { GraalVM.modules ++ GraalVM.langsPkgs ++ GraalVM.insightPkgs ++ logbackPkg ++ helidon ++ scalaLibrary ++ scalaReflect ++ slf4jApi ++ Seq( diff --git a/engine/runtime-benchmarks/src/main/java/org/enso/compiler/benchmarks/inline/InlineCompilerErrorBenchmark.java b/engine/runtime-benchmarks/src/main/java/org/enso/compiler/benchmarks/inline/InlineCompilerErrorBenchmark.java index 740b8845b740..f7bc952d31a6 100644 --- a/engine/runtime-benchmarks/src/main/java/org/enso/compiler/benchmarks/inline/InlineCompilerErrorBenchmark.java +++ b/engine/runtime-benchmarks/src/main/java/org/enso/compiler/benchmarks/inline/InlineCompilerErrorBenchmark.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; +import java.util.logging.Level; import org.enso.common.RuntimeOptions; import org.enso.compiler.Compiler; import org.enso.compiler.benchmarks.Utils; @@ -51,6 +52,7 @@ public void setup() throws IOException { ctx = Utils.createDefaultContextBuilder() .withModifiedContext(bldr -> bldr.option(RuntimeOptions.STRICT_ERRORS, "false")) + .withStdOutLogHandler(Level.WARNING) .build(); var ensoCtx = ctx.ensoContext(); compiler = ensoCtx.getCompiler(); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/common/test/ContextInsightSetupTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/common/test/ContextInsightSetupTest.java index 77d899d26a22..c6efb1acab3b 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/common/test/ContextInsightSetupTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/common/test/ContextInsightSetupTest.java @@ -10,10 +10,13 @@ import org.enso.common.ContextFactory; import org.enso.common.LanguageInfo; import org.enso.common.MethodNames.Module; +import org.enso.logger.JulHandler; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; import org.hamcrest.core.AllOf; import org.junit.AfterClass; +import org.junit.Rule; import org.junit.Test; /** @@ -25,6 +28,8 @@ public class ContextInsightSetupTest { public ContextInsightSetupTest() {} + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @AfterClass public static void cleanupInsightProperty() { System.getProperties().remove("enso.dev.insight"); @@ -45,7 +50,7 @@ public void initializeInsightViaProperty() throws Exception { var out = new ByteArrayOutputStream(); // Need to initialize the Context via ContextFactory, so that ContextInsightSetup is // triggered. - try (var ctx = ContextFactory.create().out(out).build()) { + try (var ctx = ContextFactory.create().logHandler(JulHandler.get()).out(out).build()) { var fourtyTwo = evalModule(ctx, """ main = 42 diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/ApiModificationTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/ApiModificationTest.java index 579205beaba8..9059947d174e 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/ApiModificationTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/ApiModificationTest.java @@ -8,13 +8,17 @@ import java.io.IOException; import java.util.function.BiConsumer; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; /** Tests recognitions of API changes in Enso code. */ public final class ApiModificationTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void reorderingMethods_DoesNotModifyApi() throws IOException { var prevSrc = """ diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/DocsGenerateTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/DocsGenerateTest.java index 673c7f1eb386..9f39f0ed821f 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/DocsGenerateTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/DocsGenerateTest.java @@ -24,13 +24,16 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class DocsGenerateTest { @ClassRule public static final TemporaryFolder TEMP = new TemporaryFolder(); @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); public DocsGenerateTest() {} diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/IRDumpTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/IRDumpTest.java index 444f63fb2bc6..66959c081aa2 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/IRDumpTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/dump/test/IRDumpTest.java @@ -15,6 +15,7 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.IRDumperTestWrapper; import org.enso.test.utils.ProjectUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.After; import org.junit.Assume; import org.junit.Before; @@ -34,6 +35,7 @@ public class IRDumpTest { private static final Path irDumpsDir = Path.of(IRDumpFactoryService.DEFAULT_DUMP_DIR); private ByteArrayOutputStream out; + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Rule public PrintOutRule printOutRule = new PrintOutRule(); @BeforeClass diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/BindingsMapResolutionTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/BindingsMapResolutionTest.java index 6385ab4d0ff9..8c4b0bd1fc6c 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/BindingsMapResolutionTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/BindingsMapResolutionTest.java @@ -23,8 +23,10 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import scala.jdk.CollectionConverters; @@ -33,6 +35,7 @@ public class BindingsMapResolutionTest { @ClassRule public static final TemporaryFolder TMP_DIR = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void resolveSingleName_FromSingleImport() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecCompilerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecCompilerTest.java index 4de36d88efa4..284cb7cdd1b1 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecCompilerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecCompilerTest.java @@ -1,6 +1,5 @@ package org.enso.compiler.test; -import static org.enso.compiler.test.ExecStrictCompilerTest.ctxRule; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; @@ -15,12 +14,14 @@ import org.enso.common.RuntimeOptions; import org.enso.compiler.core.ir.expression.errors.Conversion.DeclaredAsPrivate$; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.hamcrest.core.AllOf; import org.junit.After; import org.junit.ClassRule; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; public class ExecCompilerTest { @@ -30,6 +31,8 @@ public class ExecCompilerTest { .withModifiedContext(ctxBldr -> ctxBldr.option(RuntimeOptions.STRICT_ERRORS, "false")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @After public void cleanup() { ctxRule.resetOut(); @@ -528,7 +531,8 @@ public void illegalPrivateConversion() { var expectedErrMsg = DeclaredAsPrivate$.MODULE$.explain(); var runMethod = module.invokeMember(Module.EVAL_EXPRESSION, "run"); runMethod.execute(0); - assertThat(ctxRule.getOut(), containsString(expectedErrMsg)); + assertThat( + String.join("\n", appenderRule.pendingLogMessages()), containsString(expectedErrMsg)); } @Test diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecStrictCompilerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecStrictCompilerTest.java index c9819e38fb82..b40069451831 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecStrictCompilerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecStrictCompilerTest.java @@ -14,11 +14,13 @@ import org.enso.common.MethodNames; import org.enso.common.RuntimeOptions; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.hamcrest.core.AllOf; import org.junit.After; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class ExecStrictCompilerTest { @@ -28,6 +30,8 @@ public class ExecStrictCompilerTest { .withModifiedContext(ctxBldr -> ctxBldr.option(RuntimeOptions.STRICT_ERRORS, "true")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @After public void cleanMessages() { ctxRule.resetOut(); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportCycleDetectionTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportCycleDetectionTest.java index 0d6229b336ad..459542f5d9c7 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportCycleDetectionTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportCycleDetectionTest.java @@ -16,6 +16,7 @@ import org.enso.test.utils.ModuleUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.hamcrest.Matcher; import org.junit.Rule; @@ -24,6 +25,7 @@ public class ExportCycleDetectionTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void detectCycleInTwoModules() throws IOException { @@ -103,38 +105,26 @@ public void detectCycleInThreeModules() throws IOException { @Test public void noCycleDetectedWhenExportingSymbolsFromItself_1() throws IOException { - var mainMod = - new SourceModule( - QualifiedName.fromString("Main"), - """ + expectNoCompilationErrors( + tempFolder.newFolder().toPath(), + """ type Main_Type export project.Main.Main_Type """); - var projDir = tempFolder.newFolder().toPath(); - ProjectUtils.createProject("Proj", Set.of(mainMod), projDir); - try (var ctx = ContextUtils.newBuilder().withProjectRoot(projDir).build()) { - var polyCtx = new PolyglotContext(ctx.context()); - try { - polyCtx.getTopScope().compile(true); - } catch (PolyglotException e) { - fail("Compilation error not expected. But got: " + e); - } - var exportedSyms = ModuleUtils.getExportedSymbolsFromModule(ctx, "local.Proj.Main"); - assertThat(exportedSyms.size(), is(1)); - assertThat(exportedSyms, hasKey("Main_Type")); - } } @Test public void noCycleDetectedWhenExportingSymbolsFromItself_2() throws IOException { - var mainMod = - new SourceModule( - QualifiedName.fromString("Main"), - """ + expectNoCompilationErrors( + tempFolder.newFolder().toPath(), + """ type Main_Type from project.Main export Main_Type """); - var projDir = tempFolder.newFolder().toPath(); + } + + private void expectNoCompilationErrors(Path projDir, String code) throws IOException { + var mainMod = new SourceModule(QualifiedName.fromString("Main"), code); ProjectUtils.createProject("Proj", Set.of(mainMod), projDir); try (var ctx = ContextUtils.newBuilder().withProjectRoot(projDir).build()) { var polyCtx = new PolyglotContext(ctx.context()); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportedSymbolsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportedSymbolsTest.java index 2cca38026b2a..aa287bef0b81 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportedSymbolsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportedSymbolsTest.java @@ -20,14 +20,18 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import scala.jdk.javaapi.CollectionConverters; public class ExportedSymbolsTest { private Path projDir; + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Before public void setup() throws IOException { this.projDir = Files.createTempDirectory("exported-symbols-test"); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/IfThenElseTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/IfThenElseTest.java index 7a9f88ae0b53..e1010f03bddc 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/IfThenElseTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/IfThenElseTest.java @@ -10,16 +10,19 @@ import com.oracle.truffle.api.library.ExportLibrary; import com.oracle.truffle.api.library.ExportMessage; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Value; import org.hamcrest.Matchers; import org.hamcrest.core.AllOf; import org.junit.ClassRule; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; public class IfThenElseTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void simpleIfThenElse() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ImportsAndFQNConsistencyTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ImportsAndFQNConsistencyTest.java index f64209b1148e..3403b36bd3de 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ImportsAndFQNConsistencyTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ImportsAndFQNConsistencyTest.java @@ -17,6 +17,7 @@ import org.enso.compiler.data.BindingsMap.ResolvedType; import org.enso.interpreter.runtime.EnsoContext; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; @@ -47,6 +48,7 @@ public class ImportsAndFQNConsistencyTest { .withModifiedContext(ctxBldr -> ctxBldr.option(RuntimeOptions.DISABLE_IR_CACHES, "false")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Rule public final TestRule printCodeRule = new PrintCodeRule(); /** diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializerTest.java index a2aa54510121..736c702f0cb6 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializerTest.java @@ -13,9 +13,12 @@ import org.enso.common.MethodNames; import org.enso.common.RuntimeOptions; import org.enso.interpreter.runtime.EnsoContext; +import org.enso.logger.JulHandler; import org.enso.pkg.PackageManager; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.io.IOAccess; +import org.junit.Rule; import org.junit.Test; public class SerializerTest { @@ -28,14 +31,16 @@ public Context ensoContextForPackage(String name, File pkgFile) throws IOExcepti .option( RuntimeOptions.LANGUAGE_HOME_OVERRIDE, Paths.get("../../distribution/component").toFile().getAbsolutePath()) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName()) - .logHandler(System.err) + .option(RuntimeOptions.LOG_LEVEL, Level.FINE.getName()) + .logHandler(JulHandler.get()) .allowAllAccess(true) .build(); assertNotNull("Enso language is supported", ctx.getEngine().getLanguages().get("enso")); return ctx; } + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void testSerializationOfFQNs() throws Exception { var testName = "Test_Serializer_FQN"; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/StaticAnalysisTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/StaticAnalysisTest.java index 2b28a93ce2eb..2128d77969de 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/StaticAnalysisTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/StaticAnalysisTest.java @@ -39,8 +39,7 @@ public abstract class StaticAnalysisTest { (builder) -> builder .option(RuntimeOptions.ENABLE_STATIC_ANALYSIS, "true") - .option(RuntimeOptions.LOG_LEVEL, Level.INFO.getName()) - .option(RuntimeOptions.LOG_LEVEL, Level.SEVERE.getName()) + .option(RuntimeOptions.LOG_LEVEL, Level.FINE.getName()) .out(OutputStream.nullOutputStream()) .err(OutputStream.nullOutputStream())); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java index 90d9b4671c35..6bb5ff11f638 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java @@ -33,12 +33,16 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ModuleUtils; import org.enso.test.utils.ProjectUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; import scala.Option; public class TypeInferenceTest extends StaticAnalysisTest { + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void zeroAryCheck() throws Exception { final URI uri = new URI("memory://zeroAryModuleMethodCheck.enso"); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypesFromSignaturesTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypesFromSignaturesTest.java index 790cdd253776..4b4cf2b21eb8 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypesFromSignaturesTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypesFromSignaturesTest.java @@ -12,11 +12,14 @@ import org.enso.compiler.pass.analyse.types.InferredType; import org.enso.compiler.pass.analyse.types.TypeInferenceSignatures; import org.enso.compiler.pass.analyse.types.TypeRepresentation; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; +import org.junit.Rule; import org.junit.Test; import scala.Option; public class TypesFromSignaturesTest extends StaticAnalysisTest { + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void simpleCheck() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/WarningsAsErrorsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/WarningsAsErrorsTest.java index 44805cfb28eb..5be3e2e5c958 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/WarningsAsErrorsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/WarningsAsErrorsTest.java @@ -6,8 +6,10 @@ import org.enso.common.RuntimeOptions; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class WarningsAsErrorsTest { @@ -18,6 +20,8 @@ public class WarningsAsErrorsTest { ctxBldr -> ctxBldr.option(RuntimeOptions.TREAT_WARNINGS_AS_ERRORS, "true")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void warningCausesCompilerFailure() { try { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/HelloWorldCacheTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/HelloWorldCacheTest.java index 0a11113d5772..d4672575bdb2 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/HelloWorldCacheTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/HelloWorldCacheTest.java @@ -19,6 +19,7 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.junit.Rule; @@ -27,6 +28,7 @@ public class HelloWorldCacheTest { @Rule public TemporaryFolder tmpDir = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void loadingHelloWorldTwiceUsesCaching() throws Exception { @@ -36,16 +38,17 @@ public void loadingHelloWorldTwiceUsesCaching() throws Exception { assertTrue("Hello_World.enso found", helloWorld.exists()); // the first run may or may not use caches - var firstMsgs = executeOnce(helloWorld); + var firstMsgs = executeOnce(helloWorld).stdout(); assertTrue("Contains hello world:\n" + firstMsgs, firstMsgs.endsWith("Hello World")); // after the first run the caches for Hello_World.enso must be generated // the second run must read Hello_World from its .ir file! - var secondMsgs = executeOnce(helloWorld); + var secondMsgsOutput = executeOnce(helloWorld); + var secondMsgs = secondMsgsOutput.stdout(); assertTrue("Contains hello world:\n" + secondMsgs, secondMsgs.contains("Hello World")); assertThat( - "Properly deserialized:\n" + secondMsgs, - secondMsgs, + "Properly deserialized:\n" + secondMsgsOutput.logs(), + secondMsgsOutput.logs(), allOf( containsString("Deserializing module"), containsString("Hello_World"), @@ -136,7 +139,7 @@ private static ContextUtils.Builder ctxInProj(Path projRoot, boolean disablePriv .withProjectRoot(projRoot); } - private static String executeOnce(File src) throws Exception { + private OutputPair executeOnce(File src) throws Exception { try (var ctx = ContextUtils.newBuilder() .withModifiedContext( @@ -149,13 +152,22 @@ private static String executeOnce(File src) throws Exception { var code = Source.newBuilder("enso", src).build(); var res = ctx.evalModule(code, "main"); assertTrue("Result of IO.println is Nothing", res.isNull()); - return ctx.getOut() - .lines() - .filter(l -> l.toUpperCase().contains("HELLO")) - .collect(Collectors.joining("\n")); + var result = + new OutputPair( + ctx.getOut() + .lines() + .filter(l -> l.toUpperCase().contains("HELLO")) + .collect(Collectors.joining("\n")), + appenderRule.pendingLogMessages().stream() + .filter(l -> l.toUpperCase().contains("HELLO")) + .collect(Collectors.joining("\n"))); + appenderRule.dropPendingMessages(); + return result; } } + private record OutputPair(String stdout, String logs) {} + private static File children(File f, String... names) { for (var n : names) { f = new File(f, n); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/ModuleCacheTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/ModuleCacheTest.java index 587468ffb524..1ee5e0c73418 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/ModuleCacheTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/ModuleCacheTest.java @@ -10,8 +10,10 @@ import org.enso.common.RuntimeOptions; import org.enso.compiler.test.CompilerTests; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class ModuleCacheTest { @@ -21,6 +23,8 @@ public class ModuleCacheTest { .withModifiedContext(ctxBldr -> ctxBldr.option(RuntimeOptions.DISABLE_IR_CACHES, "true")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + public ModuleCacheTest() {} @Test diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/callable/PolyglotCallTypeTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/callable/PolyglotCallTypeTest.java index 58efe1044f07..0c887c1c2cb4 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/callable/PolyglotCallTypeTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/callable/PolyglotCallTypeTest.java @@ -8,12 +8,16 @@ import org.enso.interpreter.node.callable.resolver.HostMethodCallNode; import org.enso.interpreter.runtime.callable.UnresolvedSymbol; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class PolyglotCallTypeTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + public PolyglotCallTypeTest() {} @Test diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/callable/SequenceLiteralNodeTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/callable/SequenceLiteralNodeTest.java index 4b6258c18ec7..6464f5dee547 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/callable/SequenceLiteralNodeTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/callable/SequenceLiteralNodeTest.java @@ -7,11 +7,14 @@ import org.enso.interpreter.runtime.error.PanicException; import org.enso.interpreter.runtime.error.PanicSentinel; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class SequenceLiteralNodeTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); public SequenceLiteralNodeTest() {} diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNodeTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNodeTest.java index 6ba437cfa942..aa32911bf305 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNodeTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNodeTest.java @@ -15,14 +15,19 @@ import org.enso.interpreter.runtime.library.dispatch.TypeOfNode; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.hamcrest.Matchers; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class CatchPanicNodeTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static CatchPanicNode catchPanicNode; private static HostValueToEnsoNode hostValueToEnsoNode; private static TestRootNode testRootNode; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/PanicExceptionTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/PanicExceptionTest.java index b701f9d37703..e7e623a24b4b 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/PanicExceptionTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/PanicExceptionTest.java @@ -9,14 +9,16 @@ import org.enso.interpreter.runtime.error.PanicException; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class PanicExceptionTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); - private static final InteropLibrary interop = InteropLibrary.getUncached(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static CatchPanicNode catchPanicNode; private static HostValueToEnsoNode hostValueToEnsoNode; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeMultiValueTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeMultiValueTest.java index 04edab570896..f69ba5cf7fa1 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeMultiValueTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeMultiValueTest.java @@ -15,10 +15,12 @@ import org.enso.interpreter.test.ValuesGenerator; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -26,6 +28,8 @@ @RunWith(Parameterized.class) public class TypeOfNodeMultiValueTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static RootCallTarget testTypesCall; @Parameterized.Parameter(0) diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeTest.java index 13415926afcb..2613298b2eed 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeTest.java @@ -13,7 +13,9 @@ import org.enso.interpreter.test.ValuesGenerator; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -21,6 +23,7 @@ @RunWith(Parameterized.class) public class TypeOfNodeTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Parameterized.Parameter(0) public Object value; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeValueTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeValueTest.java index e9107f65f8d7..77f40b61aafb 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeValueTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/meta/TypeOfNodeValueTest.java @@ -11,13 +11,17 @@ import org.enso.interpreter.runtime.library.dispatch.TypeOfNode; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class TypeOfNodeValueTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static RootCallTarget testTypesCall; @BeforeClass diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/number/decimal/FloatTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/number/decimal/FloatTest.java index 0f7d01f90ec2..226dafa49026 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/number/decimal/FloatTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/number/decimal/FloatTest.java @@ -11,15 +11,18 @@ import org.enso.interpreter.test.WrappedPrimitive; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; /** Tests Truffle nodes for integer operations. */ public class FloatTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static AbsNode absNode; private static AddNode addNode; private static TestRootNode root; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/number/integer/IntegerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/number/integer/IntegerTest.java index fa5526be9940..8c3022128d67 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/number/integer/IntegerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/number/integer/IntegerTest.java @@ -12,15 +12,18 @@ import org.enso.interpreter.test.WrappedPrimitive; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; /** Tests Truffle nodes for integer operations. */ public class IntegerTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static AbsNode absNode; private static AddNode addNode; private static TestRootNode root; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/typecheck/TypeCheckValueTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/typecheck/TypeCheckValueTest.java index 5689170c1cda..c77e82a18a3a 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/typecheck/TypeCheckValueTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/typecheck/TypeCheckValueTest.java @@ -13,11 +13,14 @@ import org.enso.interpreter.runtime.warning.WithWarnings; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class TypeCheckValueTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void avoidDoubleWrappingOfEnsoMultiValue() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ManagedResourceTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ManagedResourceTest.java index 047bcc260e9f..b8138adfc90a 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ManagedResourceTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ManagedResourceTest.java @@ -12,16 +12,19 @@ import java.lang.ref.WeakReference; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.hamcrest.Matchers; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class ManagedResourceTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static Value newResource; private static Value createResource; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleSourcesTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleSourcesTest.java index 245a71b99ba1..472e85d01eef 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleSourcesTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleSourcesTest.java @@ -5,15 +5,17 @@ import java.io.File; import java.io.IOException; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.enso.text.buffer.Rope$; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class ModuleSourcesTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private File f; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleTest.java index 7be5943758cd..28b3cb3ff131 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleTest.java @@ -17,11 +17,13 @@ import org.enso.compiler.data.BindingsMap$ModuleReference$Concrete; import org.enso.pkg.QualifiedName; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class ModuleTest { @@ -34,6 +36,8 @@ public class ModuleTest { .withModifiedContext(b -> b.option(RuntimeOptions.STRICT_ERRORS, "false")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Before public void prepareTest() throws IOException { f = File.createTempFile("module-sources", ".enso"); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/RefTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/RefTest.java index bc7cee27a9e1..81c0b45b77fa 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/RefTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/RefTest.java @@ -8,14 +8,17 @@ import java.lang.ref.Reference; import java.lang.ref.WeakReference; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class RefTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static Value refType; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ResourceManagerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ResourceManagerTest.java index fdb385cb7ff2..d6c470eed271 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ResourceManagerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ResourceManagerTest.java @@ -9,9 +9,12 @@ import com.oracle.truffle.api.library.ExportLibrary; import com.oracle.truffle.api.library.ExportMessage; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; +import org.junit.Rule; import org.junit.Test; public class ResourceManagerTest { + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); public ResourceManagerTest() {} @@ -28,7 +31,7 @@ public void runFinalizersAtTheEnd() { } assertNotNull("Callback invoked when thread closed", fn.args); - assertNotNull("Callback invoked with one argument", fn.args.length); + assertEquals("Callback invoked with one argument", fn.args.length, 1); assertEquals("Called by our thread", fn.thread, Thread.currentThread()); assertEquals("Callback called for the registered `obj`", obj, fn.args[0]); } diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/progress/ProgressTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/progress/ProgressTest.java index 6ce7c310d20e..e159f781774b 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/progress/ProgressTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/progress/ProgressTest.java @@ -7,14 +7,17 @@ import org.enso.common.MethodNames; import org.enso.logger.ObservedMessage; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.graalvm.polyglot.proxy.ProxyExecutable; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.slf4j.LoggerFactory; public class ProgressTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); public ProgressTest() {} diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AnyOrStaticTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AnyOrStaticTest.java index 70ab3a3aa105..d44e32acb62e 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AnyOrStaticTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AnyOrStaticTest.java @@ -6,12 +6,15 @@ import org.enso.common.LanguageInfo; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class AnyOrStaticTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void methodOnModuleAny() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AnyToTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AnyToTest.java index a1f6264b82d5..3d15a0c6cee4 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AnyToTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AnyToTest.java @@ -6,13 +6,16 @@ import org.enso.interpreter.runtime.data.Type; import org.enso.interpreter.runtime.data.text.Text; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.ClassRule; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; public class AnyToTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void multiValueToInteger() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ArrayTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ArrayTest.java index a26bec83b3a5..c7f98fd3b6db 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ArrayTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ArrayTest.java @@ -10,11 +10,14 @@ import org.enso.interpreter.runtime.warning.WarningsLibrary; import org.enso.interpreter.runtime.warning.WithWarnings; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class ArrayTest { @ClassRule public static final ContextUtils ctx = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void buildVectorOfLongAndOneWarning() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java index 3ed29af5f758..64d18975ad67 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java @@ -17,11 +17,14 @@ import org.enso.interpreter.runtime.error.PanicException; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class AtomConstructorTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); public AtomConstructorTest() {} diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AutoscopedConstructorTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AutoscopedConstructorTest.java index 43460dfa999c..44af96029e4b 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AutoscopedConstructorTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AutoscopedConstructorTest.java @@ -9,13 +9,16 @@ import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.junit.After; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class AutoscopedConstructorTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @After public void resetOut() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BigNumberTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BigNumberTest.java index 6d0d67a1ad9c..4b63412c52d5 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BigNumberTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BigNumberTest.java @@ -12,13 +12,16 @@ import java.net.URISyntaxException; import java.util.ArrayList; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class BigNumberTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void evaluation() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryDispatchTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryDispatchTest.java index 6c7a4f570b05..9667757e84a1 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryDispatchTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryDispatchTest.java @@ -9,6 +9,7 @@ import org.enso.common.MethodNames; import org.enso.interpreter.runtime.error.PanicException; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; @@ -16,10 +17,13 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class BinaryDispatchTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static Value module; public BinaryDispatchTest() {} diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryOpFloatTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryOpFloatTest.java index df4fd09deec2..5addf4dd8e85 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryOpFloatTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryOpFloatTest.java @@ -9,21 +9,26 @@ import java.util.stream.Stream; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @RunWith(Parameterized.class) public class BinaryOpFloatTest { + @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static final String[] OPERATIONS = { " +", " -", " ^", " *", " %", " <=", " <", " >=", " >", " /" }; - @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + private static Value wrapReal; @Parameterized.Parameters(name = "({1}){0} ({2})") diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryOpIntegerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryOpIntegerTest.java index 980d6d404777..8579b429d5ed 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryOpIntegerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinaryOpIntegerTest.java @@ -9,16 +9,21 @@ import java.util.stream.Stream; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @RunWith(Parameterized.class) public class BinaryOpIntegerTest { + @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static final String[] OPERATIONS = { " +", " -", @@ -38,7 +43,6 @@ public class BinaryOpIntegerTest { ".bit_or", ".bit_and" }; - @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); @Parameterized.Parameters(name = "({1}){0} ({2})") public static Object[][] parameters() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinarySelfDispatchTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinarySelfDispatchTest.java index f0a164592197..c9ffa5d2746e 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinarySelfDispatchTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/BinarySelfDispatchTest.java @@ -7,16 +7,20 @@ import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class BinarySelfDispatchTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static Value module; @BeforeClass diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/CaseOfTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/CaseOfTest.java index 7c651ff3eb8e..fe5a545dc291 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/CaseOfTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/CaseOfTest.java @@ -5,11 +5,14 @@ import org.enso.interpreter.runtime.data.EnsoMultiValue; import org.enso.interpreter.runtime.data.Type; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class CaseOfTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void caseOfBoolean() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ConversionMethodTests.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ConversionMethodTests.java index d0d688bf2955..6a659cee4a98 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ConversionMethodTests.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ConversionMethodTests.java @@ -7,16 +7,19 @@ import java.util.stream.Stream; import org.enso.interpreter.runtime.library.dispatch.TypeOfNode; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; import org.junit.After; import org.junit.Assert; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class ConversionMethodTests { @ClassRule public static final ContextUtils ctx = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @After public void resetOutput() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/DebuggingEnsoTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/DebuggingEnsoTest.java index 4081296f89e4..223bbd8954a8 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/DebuggingEnsoTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/DebuggingEnsoTest.java @@ -36,6 +36,8 @@ import java.util.stream.Collectors; import org.enso.common.MethodNames.Module; import org.enso.common.RuntimeOptions; +import org.enso.logger.JulHandler; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Engine; import org.graalvm.polyglot.Language; @@ -48,8 +50,6 @@ import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.TestWatcher; -import org.junit.runner.Description; public class DebuggingEnsoTest { private static Context context; @@ -57,6 +57,8 @@ public class DebuggingEnsoTest { private static Debugger debugger; private static final ByteArrayOutputStream out = new ByteArrayOutputStream(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @BeforeClass public static void initContext() { engine = @@ -66,7 +68,7 @@ public static void initContext() { RuntimeOptions.LANGUAGE_HOME_OVERRIDE, Paths.get("../../distribution/component").toFile().getAbsolutePath()) .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName()) - .logHandler(out) + .logHandler(JulHandler.get()) .err(out) .out(out) .build(); @@ -100,19 +102,6 @@ public void resetOut() { out.reset(); } - /** Only print warnings from the compiler if a test fails. */ - @Rule - public TestWatcher testWatcher = - new TestWatcher() { - @Override - protected void failed(Throwable e, Description description) { - System.err.println("Test failed: " + description.getMethodName()); - System.err.println("Error: " + e.getMessage()); - System.err.println("Logs from the compiler and the engine: "); - System.err.println(out); - } - }; - private static void expectStackFrame( DebugStackFrame actualFrame, Map expectedValues) { Map actualValues = new HashMap<>(); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/DiagnosticFormatterTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/DiagnosticFormatterTest.java index c136b201ea6b..69a0c97a593f 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/DiagnosticFormatterTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/DiagnosticFormatterTest.java @@ -15,11 +15,13 @@ import org.enso.interpreter.runtime.util.DiagnosticFormatter; import org.enso.interpreter.runtime.util.GitHubDiagnosticFormatter; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.collections.Pair; import org.graalvm.polyglot.PolyglotException; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class DiagnosticFormatterTest { @@ -30,6 +32,8 @@ public class DiagnosticFormatterTest { b -> b.option(RuntimeOptions.STRICT_ERRORS, "true").environment("NO_COLOR", "true")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Before public void resetOut() { ctxRule.resetOut(); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EnsoMultiValueInteropTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EnsoMultiValueInteropTest.java index d8be0935ec95..97652dbca002 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EnsoMultiValueInteropTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EnsoMultiValueInteropTest.java @@ -5,8 +5,10 @@ import org.enso.interpreter.runtime.data.EnsoMultiValue; import org.enso.interpreter.runtime.data.Type; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -14,6 +16,7 @@ @RunWith(Parameterized.class) public class EnsoMultiValueInteropTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Parameterized.Parameter(0) public Object value; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EnsoMultiValueTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EnsoMultiValueTest.java index a2e18869bf8f..a13672166d2b 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EnsoMultiValueTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EnsoMultiValueTest.java @@ -11,6 +11,7 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.TypeLiteral; import org.junit.ClassRule; import org.junit.Rule; @@ -20,6 +21,7 @@ public class EnsoMultiValueTest { @Rule public final TemporaryFolder dir = new TemporaryFolder(); @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void keepIdentityOfAandB() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsConversionsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsConversionsTest.java index 45a41ade84e3..94ddd55c4aa6 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsConversionsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsConversionsTest.java @@ -6,12 +6,15 @@ import java.util.List; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class EqualsConversionsTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void testBasicInequalities() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsMultiValueTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsMultiValueTest.java index e0348a48f6ed..7b061a76bf6f 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsMultiValueTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsMultiValueTest.java @@ -12,14 +12,18 @@ import org.enso.interpreter.runtime.data.text.Text; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class EqualsMultiValueTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static EqualsNode equalsNode; private static TestRootNode testRootNode; private static HostValueToEnsoNode hostValueToEnsoNode; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsTest.java index b3364c9b164e..881f8c10020e 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/EqualsTest.java @@ -22,11 +22,13 @@ import org.enso.interpreter.runtime.number.EnsoBigInteger; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.experimental.theories.DataPoints; import org.junit.experimental.theories.Theories; @@ -36,6 +38,8 @@ @RunWith(Theories.class) public class EqualsTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static EqualsNode equalsNode; private static TestRootNode testRootNode; private static HostValueToEnsoNode hostValueToEnsoNode; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ExtensionMethodResolutionTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ExtensionMethodResolutionTest.java index 359280f4ea33..f31c9e8d23df 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ExtensionMethodResolutionTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ExtensionMethodResolutionTest.java @@ -15,6 +15,7 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.hamcrest.Matcher; import org.junit.Rule; @@ -29,16 +30,13 @@ */ public class ExtensionMethodResolutionTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static final Matcher methodsOverloadErrorMessageMatcher = allOf( containsString("Method overloads are not supported"), containsString("defined multiple times")); - private static final Matcher ambiguousResolutionErrorMessageMatcher = - allOf( - containsString("resolved ambiguously to"), - containsString("The symbol was first resolved to")); - @Test public void twoExtensionMethodsWithSameNameInOneModuleShouldFail() throws IOException { var src = """ diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/FindExceptionMessageTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/FindExceptionMessageTest.java index fecdff03fae9..9cdc333a1181 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/FindExceptionMessageTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/FindExceptionMessageTest.java @@ -10,13 +10,16 @@ import org.enso.common.HostEnsoUtils; import org.enso.interpreter.instrument.job.VisualizationResult; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class FindExceptionMessageTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void testThrowNPE() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ForeignMethodInvokeTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ForeignMethodInvokeTest.java index 8ea4f5fe29b4..7f8d82cb313d 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ForeignMethodInvokeTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ForeignMethodInvokeTest.java @@ -17,11 +17,13 @@ import org.enso.common.MethodNames; import org.enso.runtime.utils.ThreadUtils; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.graalvm.polyglot.proxy.ProxyExecutable; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class ForeignMethodInvokeTest { @@ -29,6 +31,8 @@ public class ForeignMethodInvokeTest { public static final ContextUtils ctxRule = ContextUtils.newBuilder("enso", "js").alwaysExecuteInContext(false).build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void testForeignFunctionParseFailure() throws Exception { // python is not a permitted language, therefore, invoking `py_array` method diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/InterpreterSymbolResolutionTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/InterpreterSymbolResolutionTest.java index 273587558256..f641ed13f2a9 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/InterpreterSymbolResolutionTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/InterpreterSymbolResolutionTest.java @@ -11,15 +11,18 @@ import java.net.URI; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.junit.After; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; /** Tests symbol resolution in the interpreter. */ public class InterpreterSymbolResolutionTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @After public void clear() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/LazyAtomFieldTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/LazyAtomFieldTest.java index 80ae1f738702..57af4bbe2fcc 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/LazyAtomFieldTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/LazyAtomFieldTest.java @@ -8,14 +8,17 @@ import java.util.stream.Collectors; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class LazyAtomFieldTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Before public void resetOut() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ListTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ListTest.java index 60b0ace3be13..d17459ccbfea 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ListTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/ListTest.java @@ -9,15 +9,19 @@ import java.net.URISyntaxException; import java.util.ArrayList; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class ListTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private final int size = 100_000; private static Value generator; private static Value plusOne; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/MethodResolutionTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/MethodResolutionTest.java index 78fd86668ef4..d026eff510a9 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/MethodResolutionTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/MethodResolutionTest.java @@ -10,15 +10,18 @@ import org.enso.interpreter.runtime.callable.function.Function; import org.enso.interpreter.runtime.data.Type; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public final class MethodResolutionTest { private static MethodResolverNode methodResolverNode; @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @BeforeClass public static void initCtx() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/NativeLibraryFinderTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/NativeLibraryFinderTest.java index 833bf75e08f0..ba493ffc1b58 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/NativeLibraryFinderTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/NativeLibraryFinderTest.java @@ -23,6 +23,7 @@ import org.enso.pkg.NativeLibraryFinder; import org.enso.pkg.Package; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.After; import org.junit.ClassRule; import org.junit.Rule; @@ -32,9 +33,10 @@ import org.junit.runners.model.Statement; public class NativeLibraryFinderTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Rule public final TestRule printContextRule = new PrintSystemInfoRule(); + private Package stdImgPkg; private Package stdTableauPkg; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/NonStrictModeTests.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/NonStrictModeTests.java index cfffc1749d2e..1083a8c3c0d0 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/NonStrictModeTests.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/NonStrictModeTests.java @@ -4,10 +4,12 @@ import org.enso.common.RuntimeOptions; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class NonStrictModeTests { @@ -20,6 +22,8 @@ public class NonStrictModeTests { b -> b.logHandler(logHandler).option(RuntimeOptions.STRICT_ERRORS, "false")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @AfterClass public static void dispose() { logHandler.close(); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PolyglotErrorTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PolyglotErrorTest.java index aef9db616466..1ea00b4c9fde 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PolyglotErrorTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PolyglotErrorTest.java @@ -4,15 +4,18 @@ import static org.junit.Assert.assertTrue; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class PolyglotErrorTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static Value panic; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PolyglotFindExceptionMessageTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PolyglotFindExceptionMessageTest.java index 9f2f1f07ae73..f0569cbf55a5 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PolyglotFindExceptionMessageTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PolyglotFindExceptionMessageTest.java @@ -5,13 +5,16 @@ import org.enso.common.HostEnsoUtils; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class PolyglotFindExceptionMessageTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void testJavaScriptException() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PrintTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PrintTest.java index e769d2a38fb3..d7c296164993 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PrintTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/PrintTest.java @@ -6,14 +6,17 @@ import java.net.URISyntaxException; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class PrintTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Before public void cleanOut() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/RootNamesTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/RootNamesTest.java index 4acce0e60427..0a08d4ea93d3 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/RootNamesTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/RootNamesTest.java @@ -10,15 +10,18 @@ import java.util.stream.Collectors; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Language; import org.graalvm.polyglot.Source; import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class RootNamesTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Before public void cleanOut() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SharedEngineTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SharedEngineTest.java index f9f2ddcf5c71..ba276218cab2 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SharedEngineTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SharedEngineTest.java @@ -6,6 +6,7 @@ import java.util.logging.Level; import org.enso.common.RuntimeOptions; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Engine; import org.graalvm.polyglot.Source; import org.junit.AfterClass; @@ -15,8 +16,10 @@ import org.junit.Test; public class SharedEngineTest { - private static Engine sharedEngine; @Rule public ContextUtils ctx; + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + + private static Engine sharedEngine; @BeforeClass public static void initializeSharedEngine() { @@ -24,7 +27,6 @@ public static void initializeSharedEngine() { Engine.newBuilder() .allowExperimentalOptions(true) .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName()) - .logHandler(System.err) .option(RuntimeOptions.STRICT_ERRORS, "true") .option( RuntimeOptions.LANGUAGE_HOME_OVERRIDE, diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SignaturePolyglotTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SignaturePolyglotTest.java index 2fabf8d7e3ea..29e7fc415a77 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SignaturePolyglotTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SignaturePolyglotTest.java @@ -8,14 +8,16 @@ import java.time.format.DateTimeFormatter; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class SignaturePolyglotTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void polyglotDataTimeFormatter() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SignatureTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SignatureTest.java index 12e66e91e301..4ff39249a90b 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SignatureTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/SignatureTest.java @@ -15,14 +15,17 @@ import java.util.stream.Stream; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class SignatureTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void wrongFunctionSignature() throws Exception { @@ -926,7 +929,6 @@ public void unresolvedReturnTypeSignature() throws Exception { var neg = module.invokeMember(MethodNames.Module.EVAL_EXPRESSION, "neg"); fail("Expecting an exception from compilation, not: " + neg); } catch (PolyglotException e) { - System.out.println(e); assertTrue("It is a syntax error exception", e.isSyntaxError()); } } diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/StdLibLoggingTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/StdLibLoggingTest.java index 70fb87e4b57a..4b50833341b4 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/StdLibLoggingTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/StdLibLoggingTest.java @@ -1,19 +1,23 @@ package org.enso.interpreter.test; -import static org.junit.Assert.assertEquals; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItemInArray; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.ILoggingEvent; -import java.util.List; import org.enso.logging.service.logback.MemoryAppender; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; -import org.junit.*; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; import org.slf4j.LoggerFactory; public class StdLibLoggingTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private final Source logExample = Source.newBuilder( @@ -34,8 +38,8 @@ public void testLogInRef() { var appender = (MemoryAppender) logger.getAppender("memory"); appender.reset(); ctxRule.eval(logExample).invokeMember("eval_expression", "test"); - var events = appender.getEvents().stream().map(ILoggingEvent::getMessage).toList(); + var events = appender.getEvents().stream().map(ILoggingEvent::getMessage).toArray(); - assertEquals(events, List.of("Logging something")); + assertThat(events, hasItemInArray("Logging something")); } } diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/StdLibLogsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/StdLibLogsTest.java index 5170ab515798..8b783e0caf02 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/StdLibLogsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/StdLibLogsTest.java @@ -9,17 +9,20 @@ import org.enso.common.MethodNames; import org.enso.logging.service.logback.MemoryAppender; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.slf4j.LoggerFactory; public class StdLibLogsTest { + @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static Value mod; - @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); @BeforeClass public static void initEnsoContext() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/TypeInferenceConsistencyTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/TypeInferenceConsistencyTest.java index 301f088ff034..87a9f47d3d30 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/TypeInferenceConsistencyTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/TypeInferenceConsistencyTest.java @@ -8,10 +8,12 @@ import org.enso.common.RuntimeOptions; import org.enso.compiler.test.TypeInferenceTest; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; import org.junit.After; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; /** @@ -28,6 +30,8 @@ public class TypeInferenceConsistencyTest { .option(RuntimeOptions.ENABLE_STATIC_ANALYSIS, "true")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @After public void cleanMessages() { ctxRule.resetOut(); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorBuilderTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorBuilderTest.java index 62ccbe6a3715..d5800782c279 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorBuilderTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorBuilderTest.java @@ -13,14 +13,18 @@ import org.enso.interpreter.runtime.warning.WarningsLibrary; import org.enso.interpreter.runtime.warning.WithWarnings; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class VectorBuilderTest { @ClassRule public static final ContextUtils ctx = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static Value create; @BeforeClass diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorSortTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorSortTest.java index ebe4b4daaf2f..0ba61abb84fc 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorSortTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorSortTest.java @@ -7,11 +7,13 @@ import java.util.List; import org.enso.interpreter.test.ValuesGenerator.Language; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.Assume; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.experimental.theories.DataPoints; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; @@ -23,6 +25,8 @@ @RunWith(Theories.class) public class VectorSortTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static Value sortFunc; private static Value equalsFunc; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorTest.java index 0ae31c4ebc35..2193f8fe18d9 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/VectorTest.java @@ -10,16 +10,19 @@ import java.util.function.Consumer; import org.enso.interpreter.runtime.warning.WithWarnings; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.graalvm.polyglot.proxy.ProxyArray; import org.graalvm.polyglot.proxy.ProxyExecutable; import org.junit.ClassRule; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; public class VectorTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void evaluation() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/WarningsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/WarningsTest.java index 253800de8007..bfde9570f39e 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/WarningsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/WarningsTest.java @@ -28,6 +28,7 @@ import org.enso.interpreter.runtime.warning.WarningsLibrary; import org.enso.interpreter.runtime.warning.WithWarnings; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Value; import org.hamcrest.core.AllOf; @@ -35,15 +36,16 @@ import org.junit.Assert; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class WarningsTest { + @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static ValuesGenerator generator; private static Value wrap; - @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); - @BeforeClass public static void initEnsoContext() { generator = ValuesGenerator.create(ctxRule, ValuesGenerator.Language.ENSO); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/AssertionsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/AssertionsTest.java index b6b4c859f286..ce40a6e1ae69 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/AssertionsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/AssertionsTest.java @@ -12,19 +12,22 @@ import java.util.List; import org.enso.interpreter.runtime.EnsoContext; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class AssertionsTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder() .withModifiedContext(b -> b.environment("ENSO_ENABLE_ASSERTIONS", "true")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void jvmAssertionsAreEnabled() { boolean assertsOn = false; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/DisabledAssertionsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/DisabledAssertionsTest.java index 6b687dab5863..0182d4c5fd8e 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/DisabledAssertionsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/DisabledAssertionsTest.java @@ -6,8 +6,10 @@ import static org.junit.Assert.assertTrue; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class DisabledAssertionsTest { @@ -17,6 +19,8 @@ public class DisabledAssertionsTest { .withModifiedContext(b -> b.environment("ENSO_ENABLE_ASSERTIONS", "false")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void assertionsCanBeDisabledWithEnvVar() { var ensoCtx = ctxRule.ensoContext(); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/SuccessfulAssertionExpressionTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/SuccessfulAssertionExpressionTest.java index 4eda201009d8..641527e961d5 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/SuccessfulAssertionExpressionTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/asserts/SuccessfulAssertionExpressionTest.java @@ -4,7 +4,9 @@ import java.util.List; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -13,13 +15,14 @@ @RunWith(Parameterized.class) public class SuccessfulAssertionExpressionTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder() .withModifiedContext(b -> b.environment("ENSO_ENABLE_ASSERTIONS", "true")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static final String imports = """ from Standard.Base import all diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinTypesExposeMethodsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinTypesExposeMethodsTest.java index 0673f3457bd5..b72895ec6d8c 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinTypesExposeMethodsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinTypesExposeMethodsTest.java @@ -11,8 +11,10 @@ import org.enso.interpreter.test.ValuesGenerator; import org.enso.interpreter.test.ValuesGenerator.Language; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -26,6 +28,7 @@ @RunWith(Parameterized.class) public class BuiltinTypesExposeMethodsTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private final Value type; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinsInvocationTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinsInvocationTest.java index 96a3844cb4c7..4be2e8e0f20e 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinsInvocationTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinsInvocationTest.java @@ -4,12 +4,15 @@ import static org.hamcrest.Matchers.containsString; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class BuiltinsInvocationTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void invokeBuiltinWithWrongArguments_ShouldNotCrash() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinsJavaInteropTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinsJavaInteropTest.java index 1d300d0f6c6e..cd4b7f390ac2 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinsJavaInteropTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/BuiltinsJavaInteropTest.java @@ -4,7 +4,9 @@ import static org.hamcrest.Matchers.is; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; /** @@ -13,6 +15,7 @@ */ public class BuiltinsJavaInteropTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); /** * This test reflects the state of many Java methods in stdlibs that accept Enso values as {@link diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/InvokeBuiltinMethodViaInteropTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/InvokeBuiltinMethodViaInteropTest.java index 6350b31c9194..9c89837cdb8a 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/InvokeBuiltinMethodViaInteropTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/builtins/InvokeBuiltinMethodViaInteropTest.java @@ -10,7 +10,9 @@ import com.oracle.truffle.api.interop.UnsupportedMessageException; import com.oracle.truffle.api.interop.UnsupportedTypeException; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; /** @@ -19,6 +21,7 @@ */ public class InvokeBuiltinMethodViaInteropTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void invokeGetMethodOnRef() diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportConstructorTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportConstructorTest.java index bf7bb4ec82b2..631ddc983651 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportConstructorTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportConstructorTest.java @@ -14,12 +14,14 @@ import org.enso.test.utils.ModuleUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class ExportConstructorTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void exportedConstructorsAreInBindingMap() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportConversionMethodTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportConversionMethodTest.java index 6a4727aa6efb..75c04b7fd4d6 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportConversionMethodTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportConversionMethodTest.java @@ -15,13 +15,14 @@ import org.enso.test.utils.ModuleUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class ExportConversionMethodTest { - @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void conversionMethodCanBeImportedByName() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportExtensionMethodTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportExtensionMethodTest.java index d64df56ed6f2..02ec3425ce3e 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportExtensionMethodTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportExtensionMethodTest.java @@ -14,12 +14,14 @@ import org.enso.test.utils.ModuleUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class ExportExtensionMethodTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void extensionMethodCanBeExportedByName() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportModuleTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportModuleTest.java index f68035294b0f..8f3e058a03ba 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportModuleTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportModuleTest.java @@ -14,12 +14,14 @@ import org.enso.test.utils.ModuleUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class ExportModuleTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void exportSubModuleFromExistingModule() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportResolutionOrderingTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportResolutionOrderingTest.java index f275070e647b..cf1d7b18262d 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportResolutionOrderingTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportResolutionOrderingTest.java @@ -16,6 +16,7 @@ import org.enso.test.utils.ModuleUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; @@ -30,6 +31,7 @@ */ public class ExportResolutionOrderingTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void testOrderingWithSubmoduleOfSyntheticModule() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportStaticMethodTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportStaticMethodTest.java index 74e87e0aeb60..06f4356b0975 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportStaticMethodTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/exports/ExportStaticMethodTest.java @@ -13,12 +13,14 @@ import org.enso.test.utils.ModuleUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class ExportStaticMethodTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void staticMethodCanBeExportedByName() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/hash/HashCodeTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/hash/HashCodeTest.java index b6462a66db91..e3a8f65693cb 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/hash/HashCodeTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/hash/HashCodeTest.java @@ -18,10 +18,12 @@ import org.enso.interpreter.test.ValuesGenerator; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.experimental.theories.DataPoints; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; @@ -30,6 +32,8 @@ @RunWith(Theories.class) public class HashCodeTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static HashCodeNode hashCodeNode; private static EqualsNode equalsNode; private static HostValueToEnsoNode hostValueToEnsoNode; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/imports/ImportSymbolsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/imports/ImportSymbolsTest.java index b76f6c2da9da..7cb5fc7cef60 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/imports/ImportSymbolsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/imports/ImportSymbolsTest.java @@ -15,6 +15,7 @@ import org.enso.test.utils.ModuleUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.junit.Ignore; import org.junit.Rule; @@ -23,6 +24,7 @@ public class ImportSymbolsTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void importAllFromModuleDoesNotImportModuleItself() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/AvoidIdInstrumentationTagTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/AvoidIdInstrumentationTagTest.java index 9f020df378f1..daf77c9093d2 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/AvoidIdInstrumentationTagTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/AvoidIdInstrumentationTagTest.java @@ -15,16 +15,18 @@ import org.enso.interpreter.runtime.tag.IdentifiedTag; import org.enso.interpreter.test.instruments.NodeCountingTestInstrument; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class AvoidIdInstrumentationTagTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static NodeCountingTestInstrument nodes; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/DebugServerInspectTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/DebugServerInspectTest.java index e4293e8024b3..f2a13f231935 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/DebugServerInspectTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/DebugServerInspectTest.java @@ -10,10 +10,12 @@ import org.enso.common.DebugServerInfo; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.hamcrest.core.AllOf; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class DebugServerInspectTest { @@ -24,6 +26,8 @@ public class DebugServerInspectTest { b -> b.option(DebugServerInfo.METHOD_BREAKPOINT_OPTION, "ScriptTest.inspect")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Before public void cleanSteams() { ctxRule.resetOut(); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/FunctionPointerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/FunctionPointerTest.java index 67538540541c..f8ee579fffd9 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/FunctionPointerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/FunctionPointerTest.java @@ -8,12 +8,15 @@ import org.enso.interpreter.runtime.data.atom.AtomConstructor; import org.enso.interpreter.service.ExecutionService.FunctionPointer; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class FunctionPointerTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void moduleFunctionPointer() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/IncrementalUpdatesTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/IncrementalUpdatesTest.java index e180b0193991..b11234dc3dfe 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/IncrementalUpdatesTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/IncrementalUpdatesTest.java @@ -34,10 +34,12 @@ import org.enso.polyglot.runtime.Runtime$Api$SetExpressionValueNotification; import org.enso.polyglot.runtime.Runtime$Api$StackItem$ExplicitCall; import org.enso.polyglot.runtime.Runtime$Api$StackItem$LocalCall; +import org.enso.testkit.ReportLogsOnFailureRule; import org.enso.text.editing.model; import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import scala.Option; import scala.collection.immutable.List; @@ -48,6 +50,7 @@ import scala.collection.immutable.Vector1; public class IncrementalUpdatesTest { + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static final String MODULE_NAME = "Enso_Test.Test.Main"; private TestContext context; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/InsightForEnsoTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/InsightForEnsoTest.java index 6e3715603f64..cb79b74ed9c8 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/InsightForEnsoTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/InsightForEnsoTest.java @@ -10,18 +10,21 @@ import java.util.function.Function; import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Language; import org.graalvm.polyglot.Source; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class InsightForEnsoTest { private static AutoCloseable insightHandle; @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @BeforeClass public static void initContext() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/RuntimeManagementCleanupTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/RuntimeManagementCleanupTest.java index 25e31b115522..7bd43f262b48 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/RuntimeManagementCleanupTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/RuntimeManagementCleanupTest.java @@ -4,9 +4,12 @@ import java.io.OutputStream; import java.io.PrintStream; +import org.enso.testkit.ReportLogsOnFailureRule; +import org.junit.Rule; import org.junit.Test; public final class RuntimeManagementCleanupTest { + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void cleanUp() throws InterruptedException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/RuntimeProgressTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/RuntimeProgressTest.java index db5bee2e5965..4a16d8a22b2d 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/RuntimeProgressTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/RuntimeProgressTest.java @@ -25,9 +25,11 @@ import org.enso.polyglot.runtime.Runtime$Api$Request; import org.enso.polyglot.runtime.Runtime$Api$Response; import org.enso.polyglot.runtime.Runtime$Api$StackItem$ExplicitCall; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Context; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import scala.Option; import scala.collection.immutable.List; @@ -37,6 +39,8 @@ import scala.collection.immutable.Vector1; public class RuntimeProgressTest { + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static final String MODULE_NAME = "Enso_Test.Test.Main"; private TestContext context; private File mainFile; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/WarningInstrumentationTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/WarningInstrumentationTest.java index 9c2f1c170c5f..4a6f0ebaaf6c 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/WarningInstrumentationTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/instrument/WarningInstrumentationTest.java @@ -11,17 +11,19 @@ import org.enso.interpreter.test.Metadata; import org.enso.interpreter.test.instruments.NodeCountingTestInstrument; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Language; import org.graalvm.polyglot.Source; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class WarningInstrumentationTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static NodeCountingTestInstrument instrument; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/AtomInteropTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/AtomInteropTest.java index ad74052f5b49..165165a716a8 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/AtomInteropTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/AtomInteropTest.java @@ -22,8 +22,10 @@ import java.util.ArrayList; import java.util.List; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; /** @@ -32,6 +34,7 @@ */ public class AtomInteropTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void atomMemberNames_AreNotQualified() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/GuestJavaInteropTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/GuestJavaInteropTest.java index 0150f9cc9faf..c7d033804aaa 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/GuestJavaInteropTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/GuestJavaInteropTest.java @@ -1,7 +1,9 @@ package org.enso.interpreter.test.interop; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; public final class GuestJavaInteropTest extends JavaInteropTest { @ClassRule @@ -10,6 +12,8 @@ public final class GuestJavaInteropTest extends JavaInteropTest { .withModifiedContext((b) -> b.option("enso.classLoading", "guest")) .build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Override protected final ContextUtils ctx() { return ctxRule; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/HostJavaInteropTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/HostJavaInteropTest.java index 93f8cf734f27..0f5263755717 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/HostJavaInteropTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/HostJavaInteropTest.java @@ -1,11 +1,15 @@ package org.enso.interpreter.test.interop; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; public final class HostJavaInteropTest extends JavaInteropTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Override protected final ContextUtils ctx() { return ctxRule; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/InvokeMemberConsistencyTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/InvokeMemberConsistencyTest.java index 907a40c42f2e..a30e2fa13550 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/InvokeMemberConsistencyTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/InvokeMemberConsistencyTest.java @@ -11,7 +11,9 @@ import org.enso.interpreter.test.ValuesGenerator; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -20,6 +22,8 @@ public class InvokeMemberConsistencyTest { @ClassRule public static final ContextUtils CTX = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Parameterized.Parameter(0) public Object raw; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/JsInteropTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/JsInteropTest.java index 8937be9f9a7b..65b8d09ddfdb 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/JsInteropTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/JsInteropTest.java @@ -3,13 +3,17 @@ import static org.junit.Assert.assertEquals; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class JsInteropTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void testDefaultJSPrint() { var src = diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/MetaObjectTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/MetaObjectTest.java index 6ae61e99f7c8..95e6fea093e4 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/MetaObjectTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/MetaObjectTest.java @@ -25,12 +25,10 @@ import org.enso.interpreter.test.ValuesGenerator; import org.enso.interpreter.test.ValuesGenerator.Language; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Test; +import org.junit.*; public class MetaObjectTest { private static Value sn; @@ -38,6 +36,8 @@ public class MetaObjectTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @BeforeClass public static void prepareCtx() { var ctx = ctxRule.context(); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/MethodInvocationOnTypeConsistencyTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/MethodInvocationOnTypeConsistencyTest.java index f2b0d142454c..6b792780e5aa 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/MethodInvocationOnTypeConsistencyTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/MethodInvocationOnTypeConsistencyTest.java @@ -15,12 +15,9 @@ import org.enso.common.MethodNames.Module; import org.enso.interpreter.runtime.data.Type; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.*; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @@ -49,6 +46,8 @@ public final class MethodInvocationOnTypeConsistencyTest { """; @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private static Value module; private static Type anyType; private static Type myType; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypeMembersTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypeMembersTest.java index 081d2ed5741e..0545619edf06 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypeMembersTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypeMembersTest.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Set; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.Rule; @@ -26,6 +27,8 @@ public class TypeMembersTest { @Rule public final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void checkAtomMembers() throws Exception { final URI uri = new URI("memory://how_long.enso"); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypesExposeConstructorsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypesExposeConstructorsTest.java index 1c97796ab611..208cf0a734d3 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypesExposeConstructorsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypesExposeConstructorsTest.java @@ -10,8 +10,10 @@ import org.enso.interpreter.test.ValuesGenerator; import org.enso.interpreter.test.ValuesGenerator.Language; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -27,6 +29,8 @@ public class TypesExposeConstructorsTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + private final TypeWithWrapper typeWithWrapper; public TypesExposeConstructorsTest(TypeWithWrapper typeWithWrapper) { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/invoke/ArgumentMappingTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/invoke/ArgumentMappingTest.java index 72bda5807ddf..7b4d9a0b8fd7 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/invoke/ArgumentMappingTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/invoke/ArgumentMappingTest.java @@ -8,10 +8,14 @@ import org.enso.interpreter.runtime.callable.argument.ArgumentDefinition; import org.enso.interpreter.runtime.callable.argument.CallArgumentInfo; import org.enso.interpreter.runtime.callable.function.FunctionSchema; +import org.enso.testkit.ReportLogsOnFailureRule; +import org.junit.Rule; import org.junit.Test; /** Test suite for {@link org.enso.interpreter.runtime.callable.argument.CallArgumentInfo}. */ public final class ArgumentMappingTest { + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); + @Test public void oneArgument() { var funcSchema = diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/EnsoProjectTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/EnsoProjectTest.java index 5b5c9caab9e0..d1e23790e8c9 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/EnsoProjectTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/EnsoProjectTest.java @@ -15,6 +15,7 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.Rule; import org.junit.Test; @@ -22,6 +23,7 @@ public class EnsoProjectTest { @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void noProjectWhenEvaluatingSingleFile() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/MetaIsATest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/MetaIsATest.java index 3e65f1b9e3cc..59f11fa8d520 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/MetaIsATest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/MetaIsATest.java @@ -14,11 +14,13 @@ import org.enso.interpreter.test.ValuesGenerator; import org.enso.interpreter.test.ValuesGenerator.Language; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -28,6 +30,7 @@ @RunWith(Parameterized.class) public class MetaIsATest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static Value isACheck; private static Value warningCheck; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/MetaTypeMethodsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/MetaTypeMethodsTest.java index a6a49b8d4e0e..849e614b4922 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/MetaTypeMethodsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/MetaTypeMethodsTest.java @@ -17,10 +17,12 @@ import org.enso.interpreter.test.ValuesGenerator.Language; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.TestRootNode; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; /** @@ -31,6 +33,7 @@ */ public class MetaTypeMethodsTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static GetTypeMethodsNode getTypeMethodsNode; private static TestRootNode testRootNode; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/QualifiedNameTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/QualifiedNameTest.java index 7e63d6024c3a..42f4108cac45 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/QualifiedNameTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/meta/QualifiedNameTest.java @@ -5,12 +5,14 @@ import java.io.IOException; import org.enso.test.utils.ProjectUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class QualifiedNameTest { @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static final String mainModSrc = """ diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateCheckDisabledTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateCheckDisabledTest.java index 633e8c8cd3f4..213cdb04ebcf 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateCheckDisabledTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateCheckDisabledTest.java @@ -7,12 +7,14 @@ import org.enso.common.RuntimeOptions; import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class PrivateCheckDisabledTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void privateCtorCanBeAccessedWhenPrivateCheckIsDisabled() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateConstructorAccessTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateConstructorAccessTest.java index af127e439742..877263888c77 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateConstructorAccessTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateConstructorAccessTest.java @@ -16,6 +16,7 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.junit.Rule; import org.junit.Test; @@ -23,6 +24,7 @@ public class PrivateConstructorAccessTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void privateConstructorCanBeCalledInUnknownProject() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateMethodAccessTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateMethodAccessTest.java index 6c24410ed86b..14c433881f52 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateMethodAccessTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/privateaccess/PrivateMethodAccessTest.java @@ -11,12 +11,14 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class PrivateMethodAccessTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void moduleDoesNotExposePrivateMethodsToPolyglot() { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/scope/ModuleScopeTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/scope/ModuleScopeTest.java index 13c1e70592d1..975ece7de54a 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/scope/ModuleScopeTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/scope/ModuleScopeTest.java @@ -13,6 +13,7 @@ import org.enso.test.utils.ContextUtils; import org.enso.test.utils.ProjectUtils; import org.enso.test.utils.SourceModule; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.ClassRule; import org.junit.Rule; @@ -22,6 +23,7 @@ public class ModuleScopeTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void extensionMethodIsRegisteredInModuleScope() throws IOException { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/semantic/DataflowErrorPropagationTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/semantic/DataflowErrorPropagationTest.java index ba26c79b8a09..6db15aa7e664 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/semantic/DataflowErrorPropagationTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/semantic/DataflowErrorPropagationTest.java @@ -6,15 +6,18 @@ import org.enso.common.MethodNames; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Value; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class DataflowErrorPropagationTest { @ClassRule public static final ContextUtils ctxRule = ContextUtils.newBuilder().build(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); private static Value suppressError; private static Value suppressErrorWithAssign; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/semantic/FunctionIdentityTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/semantic/FunctionIdentityTest.java index d03bc4e7c733..9a50cf8f6b3d 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/semantic/FunctionIdentityTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/semantic/FunctionIdentityTest.java @@ -7,13 +7,15 @@ import com.oracle.truffle.api.interop.InteropLibrary; import org.enso.interpreter.runtime.callable.function.Function; import org.enso.test.utils.ContextUtils; +import org.enso.testkit.ReportLogsOnFailureRule; import org.graalvm.polyglot.Source; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; public class FunctionIdentityTest { - @ClassRule public static final ContextUtils ctxRule = ContextUtils.createDefault(); + @Rule public ReportLogsOnFailureRule appenderRule = new ReportLogsOnFailureRule(); @Test public void functionWithArgIdentity() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/resources/application-test.conf b/engine/runtime-integration-tests/src/test/resources/application-test.conf index 6675fc2fa6e8..b6b54c995756 100644 --- a/engine/runtime-integration-tests/src/test/resources/application-test.conf +++ b/engine/runtime-integration-tests/src/test/resources/application-test.conf @@ -14,6 +14,7 @@ logging-service { appenders = [ { name = "memory" + forward-to = "console" }, { name = "console" @@ -21,5 +22,5 @@ logging-service { } ] default-appender = memory - log-level = "warn" + log-level = "debug" } diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/InterpreterTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/InterpreterTest.scala index 14e09ce0d95b..1db8c00ea7ef 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/InterpreterTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/InterpreterTest.scala @@ -15,6 +15,7 @@ import org.enso.polyglot.debugger.{ import org.enso.common.DebugServerInfo import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.{Function, PolyglotContext} import org.graalvm.polyglot.{Context, Value} import org.scalatest.Assertions @@ -29,7 +30,6 @@ import java.io.{ } import java.nio.file.{Path, Paths} import java.util.UUID -import java.util.logging.Level case class LocationsInstrumenter(instrument: CodeLocationsTestInstrument) { var bindings: List[EventBinding[LocationsEventListener]] = List() @@ -131,11 +131,14 @@ class InterpreterContext( .allowCreateThread(false) .out(_output) .err(_err) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName()) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName() + ) .option(RuntimeOptions.DISABLE_IR_CACHES, "true") .option(RuntimeOptions.STRICT_ERRORS, "false") .environment("NO_COLOR", "true") - .logHandler(System.err) + .logHandler(JulHandler.get) .in(_in) .option( RuntimeOptions.LANGUAGE_HOME_OVERRIDE, diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/PackageTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/PackageTest.scala index 1d60043226cd..cc2c3bebfedf 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/PackageTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/PackageTest.scala @@ -3,7 +3,7 @@ package org.enso.interpreter.test import org.enso.pkg.PackageManager import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions - +import org.enso.logger.JulHandler import org.enso.polyglot.PolyglotContext import org.graalvm.polyglot.{Context, Value} import org.scalatest.flatspec.AnyFlatSpec @@ -45,7 +45,7 @@ trait PackageTest extends AnyFlatSpec with Matchers with ValueEquality { .option("engine.WarnInterpreterOnly", "false") .out(output) .in(System.in) - .logHandler(System.err) + .logHandler(JulHandler.get) for ((key, value) <- customOptions) { ctxBuilder.option(key, value) } diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/BuiltinTypesTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/BuiltinTypesTest.scala index a8a227767e12..7c9e98e31484 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/BuiltinTypesTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/BuiltinTypesTest.scala @@ -4,8 +4,10 @@ import org.enso.interpreter.runtime.`type`.ConstantsGen import org.enso.interpreter.test.Metadata import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.graalvm.polyglot.Context import org.scalatest.BeforeAndAfterEach import org.scalatest.flatspec.AnyFlatSpec @@ -14,13 +16,13 @@ import org.scalatest.matchers.should.Matchers import java.io.{ByteArrayOutputStream, File} import java.nio.file.{Files, Paths} import java.util.UUID -import java.util.logging.Level @scala.annotation.nowarn("msg=multiarg infix syntax") class BuiltinTypesTest extends AnyFlatSpec with Matchers - with BeforeAndAfterEach { + with BeforeAndAfterEach + with ReportLogsOnFailure { // === Test Utilities ======================================================= @@ -35,7 +37,10 @@ class BuiltinTypesTest .allowExperimentalOptions(true) .allowAllAccess(true) .option(RuntimeOptions.PROJECT_ROOT, pkg.root.getAbsolutePath) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName()) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName + ) .option(RuntimeOptions.INTERPRETER_SEQUENTIAL_COMMAND_EXECUTION, "true") .option(RuntimeOptions.ENABLE_PROJECT_SUGGESTIONS, "false") .option(RuntimeOptions.ENABLE_PROGRESS_REPORT, "false") @@ -55,7 +60,7 @@ class BuiltinTypesTest .getAbsolutePath ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") - .logHandler(System.err) + .logHandler(JulHandler.get) .out(out) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeAsyncCommandsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeAsyncCommandsTest.scala index b8059ac90675..3221e29c62b4 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeAsyncCommandsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeAsyncCommandsTest.scala @@ -1,9 +1,10 @@ package org.enso.interpreter.test.instrument -import org.enso.interpreter.test.Metadata import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions import org.enso.interpreter.runtime.`type`.ConstantsGen +import org.enso.interpreter.test.Metadata +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.runtime.Runtime.Api import org.enso.polyglot.runtime.Runtime.Api.{ @@ -14,7 +15,7 @@ import org.enso.polyglot.runtime.Runtime.Api.{ import org.enso.runtime.utils.ThreadUtils import org.enso.text.{ContentVersion, Sha3_224VersionCalculator} import org.enso.text.editing.model -import org.enso.testkit.{DebugSpec, FlakySpec} +import org.enso.testkit.{DebugSpec, FlakySpec, ReportLogsOnFailure} import org.graalvm.polyglot.Context import org.scalatest.BeforeAndAfterEach import org.scalatest.flatspec.AnyFlatSpec @@ -23,7 +24,6 @@ import org.scalatest.matchers.should.Matchers import java.io.{ByteArrayOutputStream, File} import java.nio.file.{Files, Paths} import java.util.UUID -import java.util.logging.Level @scala.annotation.nowarn("msg=multiarg infix syntax") class RuntimeAsyncCommandsTest @@ -31,7 +31,8 @@ class RuntimeAsyncCommandsTest with Matchers with BeforeAndAfterEach with DebugSpec - with FlakySpec { + with FlakySpec + with ReportLogsOnFailure { // === Test Utilities ======================================================= @@ -114,7 +115,10 @@ class RuntimeAsyncCommandsTest .allowExperimentalOptions(true) .allowAllAccess(true) .option(RuntimeOptions.PROJECT_ROOT, pkg.root.getAbsolutePath) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName + ) .option( RuntimeOptions.INTERPRETER_SEQUENTIAL_COMMAND_EXECUTION, "false" @@ -138,7 +142,7 @@ class RuntimeAsyncCommandsTest ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") .out(out) - .logHandler(System.err) + .logHandler(JulHandler.get) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeComponentsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeComponentsTest.scala index db2ca45de361..acb8cec16237 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeComponentsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeComponentsTest.scala @@ -15,9 +15,10 @@ import org.enso.pkg.{ import org.enso.common.LanguageInfo import org.enso.common.MethodNames import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.runtime.Runtime.Api -import org.enso.testkit.OsSpec +import org.enso.testkit.{OsSpec, ReportLogsOnFailure} import org.graalvm.polyglot.Context import org.scalatest.concurrent.TimeLimitedTests import org.scalatest.flatspec.AnyFlatSpec @@ -28,7 +29,6 @@ import java.io.{ByteArrayOutputStream, File} import java.nio.file.{Files, Paths} import java.util.UUID import java.util.concurrent.TimeUnit -import java.util.logging.Level import scala.concurrent.duration._ @scala.annotation.nowarn("msg=multiarg infix syntax") @@ -39,7 +39,8 @@ class RuntimeComponentsTest with OptionValues with BeforeAndAfterEach with BeforeAndAfterAll - with OsSpec { + with OsSpec + with ReportLogsOnFailure { override val timeLimit = 5.minutes @@ -123,7 +124,10 @@ class RuntimeComponentsTest RuntimeOptions.LANGUAGE_HOME_OVERRIDE, distributionHome.toString ) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName + ) .option(RuntimeOptions.INTERPRETER_SEQUENTIAL_COMMAND_EXECUTION, "true") .option(RuntimeServerInfo.ENABLE_OPTION, "true") .option(RuntimeOptions.INTERACTIVE_MODE, "true") @@ -132,7 +136,7 @@ class RuntimeComponentsTest InstrumentTestContext.DISABLE_IR_CACHE ) .out(out) - .logHandler(System.err) + .logHandler(JulHandler.get) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeErrorsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeErrorsTest.scala index be16ff8406ad..07d017458416 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeErrorsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeErrorsTest.scala @@ -4,8 +4,10 @@ import org.enso.interpreter.runtime.`type`.ConstantsGen import org.enso.interpreter.test.Metadata import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.enso.text.editing.model import org.enso.text.editing.model.TextEdit import org.enso.text.{ContentVersion, Sha3_224VersionCalculator} @@ -17,13 +19,13 @@ import org.scalatest.matchers.should.Matchers import java.io.{ByteArrayOutputStream, File} import java.nio.file.{Files, Paths} import java.util.UUID -import java.util.logging.ConsoleHandler @scala.annotation.nowarn("msg=multiarg infix syntax") class RuntimeErrorsTest extends AnyFlatSpec with Matchers - with BeforeAndAfterEach { + with BeforeAndAfterEach + with ReportLogsOnFailure { // === Test Utilities ======================================================= @@ -33,9 +35,6 @@ class RuntimeErrorsTest extends InstrumentTestContext(packageName) { val out: ByteArrayOutputStream = new ByteArrayOutputStream() - val logHandler = new ConsoleHandler() - val defaultLogLevel = java.util.logging.Level.WARNING; - logHandler.setLevel(defaultLogLevel) val context = Context @@ -64,8 +63,11 @@ class RuntimeErrorsTest ) .option("engine.WarnInterpreterOnly", "false") .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") - .logHandler(logHandler) - .option(RuntimeOptions.LOG_LEVEL, defaultLogLevel.getName) + .logHandler(JulHandler.get) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName + ) .out(out) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeInstrumentTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeInstrumentTest.scala index 072634463ad8..01255cffefc0 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeInstrumentTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeInstrumentTest.scala @@ -4,8 +4,10 @@ import org.enso.interpreter.runtime.`type`.{Constants, ConstantsGen} import org.enso.interpreter.test.Metadata import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.enso.text.{ContentVersion, Sha3_224VersionCalculator} import org.graalvm.polyglot.Context import org.scalatest.BeforeAndAfterEach @@ -20,7 +22,8 @@ import java.util.UUID class RuntimeInstrumentTest extends AnyFlatSpec with Matchers - with BeforeAndAfterEach { + with BeforeAndAfterEach + with ReportLogsOnFailure { // === Test Utilities ======================================================= @@ -35,7 +38,10 @@ class RuntimeInstrumentTest .allowExperimentalOptions(true) .allowAllAccess(true) .option(RuntimeOptions.PROJECT_ROOT, pkg.root.getAbsolutePath) - .option(RuntimeOptions.LOG_LEVEL, "WARNING") + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName + ) .option(RuntimeOptions.INTERPRETER_SEQUENTIAL_COMMAND_EXECUTION, "true") .option(RuntimeOptions.ENABLE_PROJECT_SUGGESTIONS, "false") .option(RuntimeOptions.ENABLE_PROGRESS_REPORT, "false") @@ -56,7 +62,7 @@ class RuntimeInstrumentTest ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") .out(out) - .logHandler(System.err) + .logHandler(JulHandler.get) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeProjectContextTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeProjectContextTest.scala index e7440f424ef0..6bcad1628358 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeProjectContextTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeProjectContextTest.scala @@ -2,16 +2,22 @@ package org.enso.interpreter.test.instrument import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler +import org.enso.testkit.ReportLogsOnFailure import org.graalvm.polyglot.{Context, PolyglotException} import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec -import org.scalatest.{BeforeAndAfterEach, Suite} +import org.scalatest.BeforeAndAfterEach import java.nio.file.Paths -import java.util.logging.Level -trait WithContext extends BeforeAndAfterEach { this: Suite => - var context: Context = null +class RuntimeProjectContextTest + extends AnyWordSpec + with Matchers + with BeforeAndAfterEach + with ReportLogsOnFailure { + + var context: Context = _ override def afterEach(): Unit = { if (context != null) { @@ -20,12 +26,6 @@ trait WithContext extends BeforeAndAfterEach { this: Suite => super.afterEach() } -} - -class RuntimeProjectContextTest - extends AnyWordSpec - with Matchers - with WithContext { "Runtime Context" should { "report an exception if ran in context of a project " + "which cannot be loaded" in { @@ -46,8 +46,11 @@ class RuntimeProjectContextTest .getAbsolutePath ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName) - .logHandler(System.err) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName + ) + .logHandler(JulHandler.get) .build() context.initialize(LanguageInfo.ID) } diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeRecomputeTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeRecomputeTest.scala index 060f6dc33000..db4fdbc2ad19 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeRecomputeTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeRecomputeTest.scala @@ -1,12 +1,13 @@ package org.enso.interpreter.test.instrument -import org.apache.commons.io.output.TeeOutputStream import org.enso.common.{LanguageInfo, MethodNames, RuntimeOptions} import org.enso.interpreter.runtime.EnsoContext import org.enso.interpreter.runtime.`type`.ConstantsGen import org.enso.interpreter.test.Metadata +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.graalvm.polyglot.Context import org.scalatest.BeforeAndAfterEach import org.scalatest.flatspec.AnyFlatSpec @@ -20,7 +21,8 @@ import java.util.UUID class RuntimeRecomputeTest extends AnyFlatSpec with Matchers - with BeforeAndAfterEach { + with BeforeAndAfterEach + with ReportLogsOnFailure { var context: TestContext = _ @@ -28,8 +30,7 @@ class RuntimeRecomputeTest extends InstrumentTestContext(packageName) with RuntimeServerTest.TestMain { - val out: ByteArrayOutputStream = new ByteArrayOutputStream() - val logOut: ByteArrayOutputStream = new ByteArrayOutputStream() + val out: ByteArrayOutputStream = new ByteArrayOutputStream() protected val context = Context .newBuilder(LanguageInfo.ID) @@ -60,8 +61,8 @@ class RuntimeRecomputeTest .getAbsolutePath ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") - .logHandler(new TeeOutputStream(logOut, System.err)) - .out(new TeeOutputStream(out, System.err)) + .logHandler(JulHandler.get) + .out(out) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeRefactoringTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeRefactoringTest.scala index ecaf1194ae64..ad702db29a40 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeRefactoringTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeRefactoringTest.scala @@ -1,12 +1,13 @@ package org.enso.interpreter.test.instrument -import org.apache.commons.io.output.TeeOutputStream import org.enso.interpreter.runtime.`type`.ConstantsGen import org.enso.interpreter.test.Metadata import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.enso.text.editing.model import org.enso.text.editing.model.TextEdit import org.enso.text.{ContentBasedVersioning, Sha3_224VersionCalculator} @@ -18,13 +19,13 @@ import org.scalatest.matchers.should.Matchers import java.io.ByteArrayOutputStream import java.nio.file.{Files, Paths} import java.util.UUID -import java.util.logging.Level @scala.annotation.nowarn("msg=multiarg infix syntax") class RuntimeRefactoringTest extends AnyFlatSpec with Matchers - with BeforeAndAfterEach { + with BeforeAndAfterEach + with ReportLogsOnFailure { // === Test Utilities ======================================================= @@ -33,15 +34,17 @@ class RuntimeRefactoringTest class TestContext(packageName: String) extends InstrumentTestContext(packageName) { - val out: ByteArrayOutputStream = new ByteArrayOutputStream() - val logOut: ByteArrayOutputStream = new ByteArrayOutputStream() + val out: ByteArrayOutputStream = new ByteArrayOutputStream() val context = Context .newBuilder(LanguageInfo.ID) .allowExperimentalOptions(true) .allowAllAccess(true) .option(RuntimeOptions.PROJECT_ROOT, pkg.root.getAbsolutePath) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName()) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName() + ) .option(RuntimeOptions.INTERPRETER_SEQUENTIAL_COMMAND_EXECUTION, "true") .option(RuntimeOptions.ENABLE_PROJECT_SUGGESTIONS, "false") .option(RuntimeOptions.ENABLE_PROGRESS_REPORT, "false") @@ -61,8 +64,8 @@ class RuntimeRefactoringTest .getAbsolutePath ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") - .logHandler(new TeeOutputStream(logOut, System.err)) - .out(new TeeOutputStream(out, System.err)) + .logHandler(JulHandler.get) + .out(out) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeServerTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeServerTest.scala index e570145b1c2c..080ed790aea2 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeServerTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeServerTest.scala @@ -1,6 +1,5 @@ package org.enso.interpreter.test.instrument -import org.apache.commons.io.output.TeeOutputStream import org.enso.interpreter.runtime.EnsoContext import org.enso.interpreter.runtime.`type`.{Constants, ConstantsGen, Types} import org.enso.interpreter.test.Metadata @@ -8,9 +7,11 @@ import org.enso.common.LanguageInfo import org.enso.common.MethodNames import org.enso.polyglot.data.TypeGraph import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.debugger.IdExecutionService import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.enso.text.editing.model import org.enso.text.editing.model.TextEdit import org.graalvm.polyglot.Context @@ -26,7 +27,8 @@ import java.util.UUID class RuntimeServerTest extends AnyFlatSpec with Matchers - with BeforeAndAfterEach { + with BeforeAndAfterEach + with ReportLogsOnFailure { // === Test Utilities ======================================================= @@ -36,9 +38,8 @@ class RuntimeServerTest extends InstrumentTestContext(packageName) with RuntimeServerTest.TestMain { - val out: ByteArrayOutputStream = new ByteArrayOutputStream() - val logOut: ByteArrayOutputStream = new ByteArrayOutputStream() - private var _context: Context = null; + val out: ByteArrayOutputStream = new ByteArrayOutputStream() + private var _context: Context = null; protected def context(): Context = { if (_context == null) { _context = Context @@ -73,8 +74,8 @@ class RuntimeServerTest .getAbsolutePath ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") - .logHandler(new TeeOutputStream(logOut, System.err)) - .out(new TeeOutputStream(out, System.err)) + .logHandler(JulHandler.get()) + .out(out) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() } diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeStdlibTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeStdlibTest.scala index 80c6701112a2..e1eac9bcf481 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeStdlibTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeStdlibTest.scala @@ -4,10 +4,11 @@ import org.enso.interpreter.test.Metadata import org.enso.pkg.{Package, PackageManager, QualifiedName} import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.Suggestion import org.enso.polyglot.runtime.Runtime.Api -import org.enso.testkit.OsSpec +import org.enso.testkit.{OsSpec, ReportLogsOnFailure} import org.graalvm.polyglot.Context import org.scalatest.concurrent.{TimeLimitedTests, TimeLimits} import org.scalatest.flatspec.AnyFlatSpec @@ -18,7 +19,6 @@ import java.io.{ByteArrayOutputStream, File} import java.nio.file.{Files, Paths} import java.util.UUID import java.util.concurrent.TimeUnit -import java.util.logging.Level import scala.collection.mutable import scala.concurrent.duration._ @@ -30,7 +30,8 @@ class RuntimeStdlibTest with Matchers with BeforeAndAfterEach with BeforeAndAfterAll - with OsSpec { + with OsSpec + with ReportLogsOnFailure { import RuntimeStdlibTest._ @@ -66,7 +67,10 @@ class RuntimeStdlibTest RuntimeOptions.LANGUAGE_HOME_OVERRIDE, distributionHome.toString ) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName + ) .option(RuntimeOptions.INTERPRETER_SEQUENTIAL_COMMAND_EXECUTION, "true") .option(RuntimeServerInfo.ENABLE_OPTION, "true") .option(RuntimeOptions.INTERACTIVE_MODE, "true") @@ -75,7 +79,7 @@ class RuntimeStdlibTest InstrumentTestContext.DISABLE_IR_CACHE ) .out(out) - .logHandler(System.err) + .logHandler(JulHandler.get) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeSuggestionUpdatesTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeSuggestionUpdatesTest.scala index 0bf3af03f075..f6010265b54b 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeSuggestionUpdatesTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeSuggestionUpdatesTest.scala @@ -3,6 +3,7 @@ package org.enso.interpreter.test.instrument import org.enso.interpreter.runtime.`type`.ConstantsGen import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.ExportedSymbol import org.enso.polyglot.ModuleExports @@ -10,6 +11,7 @@ import org.enso.polyglot.Suggestion import org.enso.polyglot.data.Tree import org.enso.polyglot.runtime.Runtime.Api import org.enso.polyglot.runtime.Runtime.Api.SuggestionAction +import org.enso.testkit.ReportLogsOnFailure import org.enso.text.editing.model import org.enso.text.editing.model.TextEdit import org.graalvm.polyglot.Context @@ -20,14 +22,14 @@ import org.scalatest.matchers.should.Matchers import java.io.{ByteArrayOutputStream, File} import java.nio.file.{Files, Paths} import java.util.UUID -import java.util.logging.Level import scala.collection.immutable.ListSet @scala.annotation.nowarn("msg=multiarg infix syntax") class RuntimeSuggestionUpdatesTest extends AnyFlatSpec with Matchers - with BeforeAndAfterEach { + with BeforeAndAfterEach + with ReportLogsOnFailure { var context: TestContext = _ @@ -41,7 +43,10 @@ class RuntimeSuggestionUpdatesTest .allowExperimentalOptions(true) .allowAllAccess(true) .option(RuntimeOptions.PROJECT_ROOT, pkg.root.getAbsolutePath) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName + ) .option(RuntimeOptions.INTERPRETER_SEQUENTIAL_COMMAND_EXECUTION, "true") .option(RuntimeOptions.ENABLE_GLOBAL_SUGGESTIONS, "false") .option( @@ -59,7 +64,7 @@ class RuntimeSuggestionUpdatesTest ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") .out(out) - .logHandler(System.err) + .logHandler(JulHandler.get()) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() @@ -80,6 +85,7 @@ class RuntimeSuggestionUpdatesTest } override protected def beforeEach(): Unit = { + super.beforeEach() context = new TestContext("Test") context.init() val Some(Api.Response(_, Api.InitializedNotification())) = context.receive @@ -93,6 +99,7 @@ class RuntimeSuggestionUpdatesTest } override protected def afterEach(): Unit = { + super.afterEach() if (context != null) { context.close() context.out.reset() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTextEditsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTextEditsTest.scala index 2f7c2c5ca973..255d2ce15ce3 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTextEditsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTextEditsTest.scala @@ -3,6 +3,7 @@ package org.enso.interpreter.test.instrument import org.enso.interpreter.runtime.`type`.ConstantsGen import org.enso.common.LanguageInfo import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.{ ExportedSymbol, ModuleExports, @@ -11,6 +12,7 @@ import org.enso.polyglot.{ } import org.enso.polyglot.data.Tree import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.enso.text.editing.model import org.enso.text.editing.model.TextEdit import org.graalvm.polyglot.Context @@ -21,15 +23,14 @@ import org.scalatest.matchers.should.Matchers import java.io.{ByteArrayOutputStream, File} import java.nio.file.{Files, Paths} import java.util.UUID -import java.util.logging.Level - import scala.collection.immutable.ListSet @scala.annotation.nowarn("msg=multiarg infix syntax") class RuntimeTextEditsTest extends AnyFlatSpec with Matchers - with BeforeAndAfterEach { + with BeforeAndAfterEach + with ReportLogsOnFailure { var context: TestContext = _ @@ -43,7 +44,10 @@ class RuntimeTextEditsTest .allowExperimentalOptions(true) .allowAllAccess(true) .option(RuntimeOptions.PROJECT_ROOT, pkg.root.getAbsolutePath) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName + ) .option( RuntimeOptions.INTERPRETER_SEQUENTIAL_COMMAND_EXECUTION, "false" @@ -68,7 +72,7 @@ class RuntimeTextEditsTest ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") .out(out) - .logHandler(System.err) + .logHandler(JulHandler.get()) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTypesTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTypesTest.scala index 78a89dd0ba79..8565cbe9abba 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTypesTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTypesTest.scala @@ -7,8 +7,10 @@ import org.enso.interpreter.test.Metadata import org.enso.common.LanguageInfo import org.enso.common.MethodNames import org.enso.common.RuntimeOptions +import org.enso.logger.JulHandler import org.enso.polyglot.RuntimeServerInfo import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.enso.text.editing.model import org.enso.text.editing.model.TextEdit import org.graalvm.polyglot.Context @@ -24,7 +26,8 @@ import java.util.UUID class RuntimeTypesTest extends AnyFlatSpec with Matchers - with BeforeAndAfterEach { + with BeforeAndAfterEach + with ReportLogsOnFailure { // === Test Utilities ======================================================= @@ -65,7 +68,7 @@ class RuntimeTypesTest .getAbsolutePath ) .option(RuntimeOptions.EDITION_OVERRIDE, "0.0.0-dev") - .logHandler(new TeeOutputStream(logOut, System.err)) + .logHandler(JulHandler.get()) .out(new TeeOutputStream(out, System.err)) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeVisualizationsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeVisualizationsTest.scala index 976db0ddd7e0..64ff2d99de15 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeVisualizationsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeVisualizationsTest.scala @@ -2,11 +2,11 @@ package org.enso.interpreter.test.instrument import org.enso.interpreter.runtime.`type`.ConstantsGen import org.enso.interpreter.test.Metadata - import org.enso.pkg.QualifiedName import org.enso.common.RuntimeOptions import org.enso.polyglot._ import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.enso.text.editing.model import org.graalvm.polyglot.Context import org.scalatest.flatspec.AnyFlatSpec @@ -16,10 +16,12 @@ import java.io.{ByteArrayOutputStream, File} import java.nio.charset.StandardCharsets import java.nio.file.{Files, Paths} import java.util.UUID -import java.util.logging.Level @scala.annotation.nowarn("msg=multiarg infix syntax") -class RuntimeVisualizationsTest extends AnyFlatSpec with Matchers { +class RuntimeVisualizationsTest + extends AnyFlatSpec + with Matchers + with ReportLogsOnFailure { // === Test Utilities ======================================================= @@ -38,7 +40,10 @@ class RuntimeVisualizationsTest extends AnyFlatSpec with Matchers { .allowAllAccess(true) .environment("NO_COLOR", "true") .option(RuntimeOptions.PROJECT_ROOT, pkg.root.getAbsolutePath) - .option(RuntimeOptions.LOG_LEVEL, Level.WARNING.getName()) + .option( + RuntimeOptions.LOG_LEVEL, + java.util.logging.Level.WARNING.getName() + ) .option( RuntimeOptions.INTERPRETER_SEQUENTIAL_COMMAND_EXECUTION, sequentialExecution.toString @@ -62,7 +67,7 @@ class RuntimeVisualizationsTest extends AnyFlatSpec with Matchers { RuntimeOptions.LANGUAGE_HOME_OVERRIDE, Paths.get("../../distribution/component").toFile.getAbsolutePath ) - .logHandler(System.err) + .logHandler(org.enso.logger.JulHandler.get()) .out(out) .serverTransport(runtimeServerEmulator.makeServerTransport) .build() diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CaseTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CaseTest.scala index 51b88356ab32..6b5ccf6e5a83 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CaseTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CaseTest.scala @@ -5,8 +5,9 @@ import org.enso.interpreter.test.{ InterpreterException, InterpreterTest } +import org.enso.testkit.ReportLogsOnFailure -class CaseTest extends InterpreterTest { +class CaseTest extends InterpreterTest with ReportLogsOnFailure { override def subject = "Case expressions" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CodeLocationsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CodeLocationsTest.scala index 95d621def475..da6bf9f5cc8b 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CodeLocationsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CodeLocationsTest.scala @@ -6,8 +6,9 @@ import org.enso.interpreter.node.controlflow.caseexpr.CaseNode import org.enso.interpreter.node.expression.literal.LiteralNode import org.enso.interpreter.node.scope.{AssignmentNode, ReadLocalVariableNode} import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class CodeLocationsTest extends InterpreterTest { +class CodeLocationsTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Code Locations" diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CommentsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CommentsTest.scala index 6b60afe34ef3..8fa7ede4d050 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CommentsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CommentsTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class CommentsTest extends InterpreterTest { +class CommentsTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "All Comments" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CompileDiagnosticsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CompileDiagnosticsTest.scala index a1cc96c9ed2e..09d1d5f54a26 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CompileDiagnosticsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CompileDiagnosticsTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class CompileDiagnosticsTest extends InterpreterTest { +class CompileDiagnosticsTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Compile Error Reporting" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ComplexTypeDefinitionSugarTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ComplexTypeDefinitionSugarTest.scala index 8b8369cc2e31..02e459f922f0 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ComplexTypeDefinitionSugarTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ComplexTypeDefinitionSugarTest.scala @@ -1,8 +1,11 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class ComplexTypeDefinitionSugarTest extends InterpreterTest { +class ComplexTypeDefinitionSugarTest + extends InterpreterTest + with ReportLogsOnFailure { override def subject: String = "Complex type definitions" diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ConstructorsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ConstructorsTest.scala index 9e2dd88cebee..1110c001420f 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ConstructorsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ConstructorsTest.scala @@ -5,8 +5,9 @@ import org.enso.interpreter.test.{ InterpreterException, InterpreterTest } +import org.enso.testkit.ReportLogsOnFailure -class ConstructorsTest extends InterpreterTest { +class ConstructorsTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Constructors & Pattern Matching" diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CurryingTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CurryingTest.scala index 3f3d0ae050ff..63786f81fb99 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CurryingTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/CurryingTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class CurryingTest extends InterpreterTest { +class CurryingTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Functions" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DataflowErrorsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DataflowErrorsTest.scala index 30b4bb2c0033..592c7faa7a54 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DataflowErrorsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DataflowErrorsTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class DataflowErrorsTest extends InterpreterTest { +class DataflowErrorsTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Dataflow Errors" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DateTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DateTest.scala index c2bde01b4b7a..190f2f5171d8 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DateTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DateTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class DateTest extends InterpreterTest { +class DateTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "LocalDate" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DesignExecutionEnvironmentTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DesignExecutionEnvironmentTest.scala index d6bbe3cbf257..95ca80a9b378 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DesignExecutionEnvironmentTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/DesignExecutionEnvironmentTest.scala @@ -1,9 +1,12 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure import org.graalvm.polyglot.Context -class DesignExecutionEnvironmentTest extends InterpreterTest { +class DesignExecutionEnvironmentTest + extends InterpreterTest + with ReportLogsOnFailure { override def contextModifiers: Option[Context#Builder => Context#Builder] = Some(_.option("enso.ExecutionEnvironment", "design")) diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/EvalTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/EvalTest.scala index e6bcfc11ecd3..5089a97cc8ec 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/EvalTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/EvalTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class EvalTest extends InterpreterTest { +class EvalTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Debug.eval" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ExpressionIdTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ExpressionIdTest.scala index 83a231e527b4..397adc66e626 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ExpressionIdTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ExpressionIdTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest, Metadata} +import org.enso.testkit.ReportLogsOnFailure -class ExpressionIdTest extends InterpreterTest { +class ExpressionIdTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Expression IDs" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/FunctionSugarTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/FunctionSugarTest.scala index 8db28950437a..f437f2fca2cc 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/FunctionSugarTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/FunctionSugarTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class FunctionSugarTest extends InterpreterTest { +class FunctionSugarTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Function Definition Sugar" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/GlobalScopeTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/GlobalScopeTest.scala index 94125f07159b..5b68001b2d6e 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/GlobalScopeTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/GlobalScopeTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class GlobalScopeTest extends InterpreterTest { +class GlobalScopeTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Functions" diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/GroupingTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/GroupingTest.scala index d8a05feadef4..c341c70834b4 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/GroupingTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/GroupingTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class GroupingTest extends InterpreterTest { +class GroupingTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Parentheses" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ImportsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ImportsTest.scala index 496caed4380b..285e2be3396d 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ImportsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/ImportsTest.scala @@ -2,8 +2,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterException, PackageTest} import org.enso.common.RuntimeOptions +import org.enso.testkit.ReportLogsOnFailure -class ImportsTest extends PackageTest { +class ImportsTest extends PackageTest with ReportLogsOnFailure { implicit def messagingNatureOInterpreterException : org.scalatest.enablers.Messaging[InterpreterException] = new org.scalatest.enablers.Messaging[InterpreterException] { diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/InteropTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/InteropTest.scala index f1fd8e87d30f..45772ea2f2aa 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/InteropTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/InteropTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class InteropTest extends InterpreterTest { +class InteropTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Interop Library" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaChainingTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaChainingTest.scala index c3e3e4dd68f5..98858056f13e 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaChainingTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaChainingTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class LambdaChainingTest extends InterpreterTest { +class LambdaChainingTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Chains of Lambdas" diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaShorthandArgsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaShorthandArgsTest.scala index 602acfd627bd..4696af6361c3 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaShorthandArgsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaShorthandArgsTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class LambdaShorthandArgsTest extends InterpreterTest { +class LambdaShorthandArgsTest extends InterpreterTest with ReportLogsOnFailure { override def subject = "Lambda shorthand arguments" diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaTest.scala index 674a832657b6..cf752ff9a056 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LambdaTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class LambdaTest extends InterpreterTest { +class LambdaTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Lambdas" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LiveExecutionEnvironmentTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LiveExecutionEnvironmentTest.scala index abefb5f39fa3..b71f4970cdc4 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LiveExecutionEnvironmentTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/LiveExecutionEnvironmentTest.scala @@ -1,9 +1,12 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure import org.graalvm.polyglot.Context -class LiveExecutionEnvironmentTest extends InterpreterTest { +class LiveExecutionEnvironmentTest + extends InterpreterTest + with ReportLogsOnFailure { override def contextModifiers: Option[Context#Builder => Context#Builder] = Some(_.option("enso.ExecutionEnvironment", "live")) diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/MethodsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/MethodsTest.scala index b797a756f6f2..9b76f61f72ae 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/MethodsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/MethodsTest.scala @@ -5,8 +5,9 @@ import org.enso.interpreter.test.{ InterpreterException, InterpreterTest } +import org.enso.testkit.ReportLogsOnFailure -class MethodsTest extends InterpreterTest { +class MethodsTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Methods" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/MixfixFunctionsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/MixfixFunctionsTest.scala index 0050a227f30c..c831a0379ec3 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/MixfixFunctionsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/MixfixFunctionsTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class MixfixFunctionsTest extends InterpreterTest { +class MixfixFunctionsTest extends InterpreterTest with ReportLogsOnFailure { override def subject = "Mixfix Functions" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/NamedArgumentsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/NamedArgumentsTest.scala index 34223c19e7c6..6337f61185cd 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/NamedArgumentsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/NamedArgumentsTest.scala @@ -5,8 +5,9 @@ import org.enso.interpreter.test.{ InterpreterException, InterpreterTest } +import org.enso.testkit.ReportLogsOnFailure -class NamedArgumentsTest extends InterpreterTest { +class NamedArgumentsTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Named and Default Arguments" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/OperatorSectionsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/OperatorSectionsTest.scala index 5639f4581d1a..99fc97127093 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/OperatorSectionsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/OperatorSectionsTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class OperatorSectionsTest extends InterpreterTest { +class OperatorSectionsTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Operator Sections" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/OverloadsResolutionErrorTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/OverloadsResolutionErrorTest.scala index 509ae316223b..79a6b122db66 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/OverloadsResolutionErrorTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/OverloadsResolutionErrorTest.scala @@ -6,9 +6,12 @@ import org.enso.interpreter.test.{ InterpreterTest } import org.enso.common.RuntimeOptions +import org.enso.testkit.ReportLogsOnFailure import org.graalvm.polyglot.Context -class OverloadsResolutionErrorTest extends InterpreterTest { +class OverloadsResolutionErrorTest + extends InterpreterTest + with ReportLogsOnFailure { override def subject: String = "Symbol Overloads" override def contextModifiers: Option[Context#Builder => Context#Builder] = diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PanicsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PanicsTest.scala index e6f022f10ec4..6c3325dc831b 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PanicsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PanicsTest.scala @@ -5,8 +5,9 @@ import org.enso.interpreter.test.{ InterpreterException, InterpreterTest } +import org.enso.testkit.ReportLogsOnFailure -class PanicsTest extends InterpreterTest { +class PanicsTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Panics" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PatternMatchTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PatternMatchTest.scala index 4582a094d3e4..bc4fafb69f0c 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PatternMatchTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PatternMatchTest.scala @@ -5,8 +5,9 @@ import org.enso.interpreter.test.{ InterpreterException, InterpreterTest } +import org.enso.testkit.ReportLogsOnFailure -class PatternMatchTest extends InterpreterTest { +class PatternMatchTest extends InterpreterTest with ReportLogsOnFailure { override def subject = "Pattern Matching" diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PolyglotTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PolyglotTest.scala index 85a2ab2917b4..af8128134f55 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PolyglotTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/PolyglotTest.scala @@ -5,8 +5,9 @@ import org.enso.interpreter.test.{ InterpreterException, InterpreterTest } +import org.enso.testkit.ReportLogsOnFailure -class PolyglotTest extends InterpreterTest { +class PolyglotTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Polyglot" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/RuntimeManagementTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/RuntimeManagementTest.scala index 5f2bd4281b05..77184da2139b 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/RuntimeManagementTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/RuntimeManagementTest.scala @@ -7,8 +7,9 @@ import org.enso.common.{LanguageInfo, MethodNames} import scala.ref.WeakReference import org.graalvm.polyglot.Context import org.enso.common.RuntimeOptions +import org.enso.testkit.ReportLogsOnFailure -class RuntimeManagementTest extends InterpreterTest { +class RuntimeManagementTest extends InterpreterTest with ReportLogsOnFailure { private def parallelism = 5 override def subject: String = "Enso Code Execution" diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SimpleArithmeticTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SimpleArithmeticTest.scala index 666e1c80d6ad..e6f932ce9e49 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SimpleArithmeticTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SimpleArithmeticTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class SimpleArithmeticTest extends InterpreterTest { +class SimpleArithmeticTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "Arithmetic" diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/StateTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/StateTest.scala index 46609b48643d..2d18e60b7dac 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/StateTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/StateTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class StateTest extends InterpreterTest { +class StateTest extends InterpreterTest with ReportLogsOnFailure { override def subject: String = "State" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/StrictCompileDiagnosticsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/StrictCompileDiagnosticsTest.scala index d6f360bd54b3..6c3086b93117 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/StrictCompileDiagnosticsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/StrictCompileDiagnosticsTest.scala @@ -6,9 +6,12 @@ import org.enso.interpreter.test.{ InterpreterTest } import org.enso.common.RuntimeOptions +import org.enso.testkit.ReportLogsOnFailure import org.graalvm.polyglot.Context -class StrictCompileDiagnosticsTest extends InterpreterTest { +class StrictCompileDiagnosticsTest + extends InterpreterTest + with ReportLogsOnFailure { override def subject: String = "Compile Errors in Batch Mode" override def contextModifiers: Option[Context#Builder => Context#Builder] = diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SuspendedArgumentsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SuspendedArgumentsTest.scala index 7c274342e6b0..f49f386d29dc 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SuspendedArgumentsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SuspendedArgumentsTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class SuspendedArgumentsTest extends InterpreterTest { +class SuspendedArgumentsTest extends InterpreterTest with ReportLogsOnFailure { override def subject = "Suspended arguments" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SystemProcessTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SystemProcessTest.scala index ca9783035d4d..08a08497149d 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SystemProcessTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/SystemProcessTest.scala @@ -5,11 +5,14 @@ import org.enso.interpreter.test.{ InterpreterException, InterpreterTest } -import org.enso.testkit.OsSpec +import org.enso.testkit.{OsSpec, ReportLogsOnFailure} import scala.util.Random -class SystemProcessTest extends InterpreterTest with OsSpec { +class SystemProcessTest + extends InterpreterTest + with OsSpec + with ReportLogsOnFailure { override def subject: String = "System.create_process" override def specify(implicit diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/TextTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/TextTest.scala index 9f3843e4f562..a0b21f573381 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/TextTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/semantic/TextTest.scala @@ -1,8 +1,9 @@ package org.enso.interpreter.test.semantic import org.enso.interpreter.test.{InterpreterContext, InterpreterTest} +import org.enso.testkit.ReportLogsOnFailure -class TextTest extends InterpreterTest { +class TextTest extends InterpreterTest with ReportLogsOnFailure { override def subject = "Text Library" override def specify(implicit diff --git a/lib/java/test-utils/src/main/java/org/enso/test/utils/ContextUtils.java b/lib/java/test-utils/src/main/java/org/enso/test/utils/ContextUtils.java index 700e38b2cb74..021700885196 100644 --- a/lib/java/test-utils/src/main/java/org/enso/test/utils/ContextUtils.java +++ b/lib/java/test-utils/src/main/java/org/enso/test/utils/ContextUtils.java @@ -12,6 +12,7 @@ import java.util.Set; import java.util.concurrent.Callable; import java.util.function.Function; +import java.util.logging.Handler; import java.util.logging.Level; import java.util.stream.Collectors; import org.enso.common.LanguageInfo; @@ -20,6 +21,7 @@ import org.enso.common.MethodNames.TopScope; import org.enso.common.RuntimeOptions; import org.enso.interpreter.runtime.EnsoContext; +import org.enso.logger.JulHandler; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Engine; import org.graalvm.polyglot.Source; @@ -91,8 +93,8 @@ public static Builder newBuilder(String... permittedLanguages) { public static ContextUtils createDefault() { var stdout = new ByteArrayOutputStream(); var stderr = new ByteArrayOutputStream(); - var ctxBldr = Builder.defaultContextBuilder(); - ctxBldr.out(stdout).err(stderr).logHandler(stdout); + var ctxBldr = Builder.defaultContextBuilder(Level.FINE, JulHandler.get()); + ctxBldr.out(stdout).err(stderr); return new ContextUtils(ctxBldr, stdout, stderr, true); } @@ -390,7 +392,7 @@ private Builder(String... permittedLanguages) { this.polyglotCtxBldr .out(stdout) .err(stderr) - .logHandler(stdout) + .logHandler(JulHandler.get()) .environment("NO_COLOR", "true"); } @@ -408,12 +410,39 @@ private static Context.Builder defaultContextBuilder(String... permittedLanguage Paths.get("../../distribution/component").toFile().getAbsolutePath()); } + private static Context.Builder defaultContextBuilder( + Level logLevel, Handler logHandler, String... permittedLanguages) { + return Context.newBuilder(permittedLanguages) + .allowExperimentalOptions(true) + .allowIO(IOAccess.ALL) + .allowAllAccess(true) + .environment("NO_COLOR", "true") + .logHandler(logHandler) + .option(RuntimeOptions.LOG_LEVEL, logLevel.getName()) + .option(RuntimeOptions.DISABLE_IR_CACHES, "true") + .option(RuntimeOptions.STRICT_ERRORS, "true") + .option( + RuntimeOptions.LANGUAGE_HOME_OVERRIDE, + Paths.get("../../distribution/component").toFile().getAbsolutePath()); + } + /** Modifies the {@link Context.Builder}. Can be called multiple times. */ public Builder withModifiedContext(Function modifier) { polyglotCtxBldr = modifier.apply(polyglotCtxBldr); return this; } + /** + * Helper method to allow stdout as engine's log handler. + * + * @param logLevel minimal level of logs that will be forwarded to log handler + * @return modified builder + */ + public Builder withStdOutLogHandler(Level logLevel) { + polyglotCtxBldr.logHandler(stdout).option(RuntimeOptions.LOG_LEVEL, logLevel.getName()); + return this; + } + /** * Shortcut for {@code withModifiedContext(b -> b.option(RuntimeOptions.PROJECT_ROOT, * projRoot)}. diff --git a/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/MemoryAppender.java b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/MemoryAppender.java index de6a0be3e939..6bcf640820d8 100644 --- a/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/MemoryAppender.java +++ b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/MemoryAppender.java @@ -14,46 +14,32 @@ public class MemoryAppender extends AppenderBase { private final Appender underlying; private final List events; - private volatile boolean forwardLogs; + private volatile boolean canForwardLogs; public MemoryAppender(Appender underlying) { this.underlying = underlying; this.events = new ArrayList<>(); - this.forwardLogs = underlying != null; + this.canForwardLogs = underlying != null; } protected void append(ILoggingEvent e) { - if (forwardLogs) { - underlying.doAppend(e); - } else { - events.add(e); - } + events.add(e); } public void reset() { - this.forwardLogs = underlying != null; - if (forwardLogs) { - this.underlying.start(); - } events.clear(); } public void flush() { - // Ensure context set - underlying.start(); - for (var element : events) { - underlying.doAppend(element); + if (canForwardLogs) { + for (var element : events) { + underlying.doAppend(element); + } } - underlying.stop(); - } - - public void stopForwarding() { - this.forwardLogs = false; - this.underlying.stop(); } public List getEvents() { - return events; + return new ArrayList<>(events); } @Override @@ -63,7 +49,7 @@ public String getName() { @Override public String toString() { - if (this.underlying != null) { + if (canForwardLogs) { return "MemoryAppender[forwardTo=" + this.underlying.getName() + "]"; } else { return "MemoryAppender[forwardTo=]"; diff --git a/lib/scala/logging-service-logback/src/test/java/module-info.java b/lib/scala/logging-service-logback/src/test/java/module-info.java index 3bc35804aeb7..0ff19bf5c030 100644 --- a/lib/scala/logging-service-logback/src/test/java/module-info.java +++ b/lib/scala/logging-service-logback/src/test/java/module-info.java @@ -13,4 +13,5 @@ org.enso.logging.service.logback.test.provider.TestLogProvider; exports org.enso.logging.service.logback.test.provider; + exports org.enso.logging.service.logback.test.utils; } diff --git a/lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/provider/TestLogProvider.java b/lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/provider/TestLogProvider.java index 0316a4e5dfbe..1ff934a7c8a5 100644 --- a/lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/provider/TestLogProvider.java +++ b/lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/provider/TestLogProvider.java @@ -4,8 +4,10 @@ import ch.qos.logback.classic.spi.LogbackServiceProvider; import org.enso.logging.config.MissingConfigurationField; import org.enso.logging.service.logback.LogbackSetup; +import org.enso.logging.service.logback.MemoryAppender; import org.slf4j.ILoggerFactory; import org.slf4j.IMarkerFactory; +import org.slf4j.Logger; import org.slf4j.spi.MDCAdapter; import org.slf4j.spi.SLF4JServiceProvider; @@ -16,6 +18,19 @@ public class TestLogProvider implements SLF4JServiceProvider { private boolean initialized = false; + private static MemoryAppender memoryAppender = null; + + public static MemoryAppender getMemoryAppender(ILoggerFactory ctx) { + if (memoryAppender == null) { + var rootLogger = (ch.qos.logback.classic.Logger) (ctx.getLogger(Logger.ROOT_LOGGER_NAME)); + var appender = rootLogger.getAppender(MemoryAppender.NAME); + if (appender instanceof MemoryAppender a) { + memoryAppender = a; + } + } + return memoryAppender; + } + @Override public ILoggerFactory getLoggerFactory() { ILoggerFactory factory = underlying.getLoggerFactory(); @@ -24,8 +39,6 @@ public ILoggerFactory getLoggerFactory() { try { var setup = new LogbackSetup((LoggerContext) factory); setup.setup(); - // useful when exceptions are being swallowed in tests - // setup.setupConsoleAppender(Level.WARN); initialized = true; } catch (MissingConfigurationField e) { throw new RuntimeException(e); diff --git a/lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/utils/TestAppenderUtils.java b/lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/utils/TestAppenderUtils.java new file mode 100644 index 000000000000..9ed051d74949 --- /dev/null +++ b/lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/utils/TestAppenderUtils.java @@ -0,0 +1,24 @@ +package org.enso.logging.service.logback.test.utils; + +import org.enso.logging.service.logback.MemoryAppender; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TestAppenderUtils { + + private TestAppenderUtils() {} + + private static MemoryAppender memoryAppender = null; + + public static MemoryAppender getMemoryAppender() { + if (memoryAppender == null) { + var ctx = LoggerFactory.getILoggerFactory(); + var rootLogger = (ch.qos.logback.classic.Logger) (ctx.getLogger(Logger.ROOT_LOGGER_NAME)); + var appender = rootLogger.getAppender(MemoryAppender.NAME); + if (appender instanceof MemoryAppender a) { + memoryAppender = a; + } + } + return memoryAppender; + } +} diff --git a/lib/scala/testkit/src/main/java/org/enso/testkit/ReportLogsOnFailureRule.java b/lib/scala/testkit/src/main/java/org/enso/testkit/ReportLogsOnFailureRule.java new file mode 100644 index 000000000000..1233d2229280 --- /dev/null +++ b/lib/scala/testkit/src/main/java/org/enso/testkit/ReportLogsOnFailureRule.java @@ -0,0 +1,50 @@ +package org.enso.testkit; + +import java.util.List; +import java.util.stream.Collectors; +import org.enso.logging.service.logback.test.utils.TestAppenderUtils; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; + +public final class ReportLogsOnFailureRule extends TestWatcher { + + @Override + protected void succeeded(Description description) { + var appender = TestAppenderUtils.getMemoryAppender(); + if (appender != null) { + appender.reset(); + } + } + + /** + * Helper function returning currently pending log messages without materializing them in the + * underlying appender. + * + * @return currently pending (formatted) log messages only + */ + public List pendingLogMessages() { + var appender = TestAppenderUtils.getMemoryAppender(); + if (appender != null) { + return appender.getEvents().stream() + .map(e -> e.getFormattedMessage()) + .collect(Collectors.toList()); + } else { + return List.of(); + } + } + + /** Helper function to drop currently pending log messages on demand. */ + public void dropPendingMessages() { + var appender = TestAppenderUtils.getMemoryAppender(); + if (appender != null) { + appender.reset(); + } + } + + @Override + protected void failed(Throwable e, Description description) { + var appender = TestAppenderUtils.getMemoryAppender(); + appender.flush(); + appender.reset(); + } +} diff --git a/lib/scala/testkit/src/main/scala/org/enso/testkit/ReportLogsOnFailure.scala b/lib/scala/testkit/src/main/scala/org/enso/testkit/ReportLogsOnFailure.scala index c658775820e8..32be338e4b25 100644 --- a/lib/scala/testkit/src/main/scala/org/enso/testkit/ReportLogsOnFailure.scala +++ b/lib/scala/testkit/src/main/scala/org/enso/testkit/ReportLogsOnFailure.scala @@ -1,51 +1,44 @@ package org.enso.testkit -import ch.qos.logback.classic.spi.ILoggingEvent -import ch.qos.logback.core.Appender -import org.enso.logging.service.logback.MemoryAppender import org.scalatest.{Args, Failed, Outcome, Status, TestSuite} -import org.slf4j.{Logger, LoggerFactory} +import org.enso.logging.service.logback.test.utils.TestAppenderUtils trait ReportLogsOnFailure extends TestSuite { - private lazy val appender: Appender[ILoggingEvent] = { - val ctx = LoggerFactory.getILoggerFactory; - val rootLogger = ctx - .getLogger(Logger.ROOT_LOGGER_NAME) - .asInstanceOf[ch.qos.logback.classic.Logger] - rootLogger.getAppender(MemoryAppender.NAME) - } - abstract override protected def runTest( testName: String, args: Args ): Status = { - appender match { - case memoryAppender: MemoryAppender => - memoryAppender.stopForwarding() - super.runTest(testName, args) - case _ => + val appender = TestAppenderUtils.getMemoryAppender + if (appender != null) { + try { super.runTest(testName, args) + } catch { + case e: Throwable => + appender.flush() + throw e + } + } else { + super.runTest(testName, args) } - } abstract override def withFixture(test: NoArgTest): Outcome = { - appender match { - case memoryAppender: MemoryAppender => - try { - super.withFixture(test) match { - case outcome @ Failed(_) => - memoryAppender.flush() - outcome - case outcome => - outcome - } - } finally { - memoryAppender.reset() + val appender = TestAppenderUtils.getMemoryAppender() + if (appender != null) { + try { + super.withFixture(test) match { + case outcome @ Failed(_) => + appender.flush() + outcome + case outcome => + outcome } - case _ => - super.withFixture(test) + } finally { + appender.reset() + } + } else { + super.withFixture(test) } }