From 3958b63d0d94e6242724f65d8d9c0e4033764c9c Mon Sep 17 00:00:00 2001 From: jaroslawmalekcodete Date: Mon, 23 Jul 2018 23:10:51 +0200 Subject: [PATCH] jarek/7481: repr of scala unit object as MIMEContainer.HIDDEN (#7694) * #7481: repr of scala unit object as MIMEContainer.HIDDEN * #7481: rename from isUnitObject to shouldHideResult --- .../beakerx/evaluator/EvaluatorBaseTest.java | 4 + .../scala/evaluator/ScalaEvaluatorGlue.scala | 14 +++- .../evaluator/ScalaBaseEvaluatorTest.java | 9 ++ .../scala/evaluator/ScalaEvaluatorTest.java | 3 +- .../scala/evaluator/ScalaReprTest.java | 83 +++++++++++++++++++ 5 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaReprTest.java diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorBaseTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorBaseTest.java index a581b5269e..852ee54131 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorBaseTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorBaseTest.java @@ -100,6 +100,10 @@ public void returnPrintln() throws Exception { //when TryResult result = evaluator().evaluate(seo, code); //then + verifyReturnPrintlnStatement(result); + } + + protected void verifyReturnPrintlnStatement(TryResult result) { assertThat((String) result.result()).isNull(); } diff --git a/kernel/scala/src/main/scala/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorGlue.scala b/kernel/scala/src/main/scala/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorGlue.scala index 3d818b390b..f9209789bf 100644 --- a/kernel/scala/src/main/scala/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorGlue.scala +++ b/kernel/scala/src/main/scala/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorGlue.scala @@ -21,6 +21,7 @@ import java.net.URL import com.twosigma.beakerx.TryResult import com.twosigma.beakerx.autocomplete.AutocompleteResult import com.twosigma.beakerx.jvm.`object`.SimpleEvaluationObject +import com.twosigma.beakerx.mimetype.MIMEContainer import scala.tools.jline_embedded.console.completer.Completer import scala.tools.nsc.Settings @@ -119,8 +120,12 @@ class ScalaEvaluatorGlue(val cl: ClassLoader, var cp: String, val replClassdir: out.setOutputHandler() interpreter.interpret(code) match { case Success => { - val value = getOut.asInstanceOf[Object] - either = TryResult.createResult(value) + if (shouldHideResult()) { + either = TryResult.createResult(MIMEContainer.HIDDEN) + } else { + val value = getOut.asInstanceOf[Object] + either = TryResult.createResult(value) + } } case Incomplete => { either = TryResult.createError("input is incomplete") @@ -139,6 +144,11 @@ class ScalaEvaluatorGlue(val cl: ClassLoader, var cp: String, val replClassdir: either } + private def shouldHideResult() = { + val print = interpreter.lastRequest.lineRep.call("$print").toString.trim + print.equals("") + } + def autocomplete(buf: String, len: Integer): AutocompleteResult = { val maybes = new java.util.ArrayList[CharSequence] val offset = completer.complete(buf, len, maybes) diff --git a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaBaseEvaluatorTest.java b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaBaseEvaluatorTest.java index e334ab837c..3d73f34a57 100644 --- a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaBaseEvaluatorTest.java +++ b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaBaseEvaluatorTest.java @@ -15,13 +15,17 @@ */ package com.twosigma.beakerx.scala.evaluator; +import com.twosigma.beakerx.TryResult; import com.twosigma.beakerx.evaluator.BaseEvaluator; import com.twosigma.beakerx.evaluator.EvaluatorBaseTest; import com.twosigma.beakerx.evaluator.TempFolderFactory; +import com.twosigma.beakerx.mimetype.MIMEContainer; import com.twosigma.beakerx.scala.TestScalaEvaluator; import org.junit.AfterClass; import org.junit.BeforeClass; +import static org.assertj.core.api.Assertions.assertThat; + public class ScalaBaseEvaluatorTest extends EvaluatorBaseTest { private static BaseEvaluator evaluator; @@ -67,4 +71,9 @@ protected String codeForPrintln() { return "println(\"Hello\")"; } + @Override + protected void verifyReturnPrintlnStatement(TryResult tryResult) { + assertThat(((MIMEContainer) tryResult.result())).isEqualTo(MIMEContainer.HIDDEN); + } + } diff --git a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorTest.java b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorTest.java index 6cdd0d4101..0f2ad6311a 100644 --- a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorTest.java +++ b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorTest.java @@ -18,13 +18,12 @@ import com.twosigma.beakerx.TryResult; import com.twosigma.beakerx.chart.xychart.Plot; -import com.twosigma.beakerx.kernel.KernelManager; import com.twosigma.beakerx.jvm.object.SimpleEvaluationObject; import com.twosigma.beakerx.kernel.EvaluatorParameters; +import com.twosigma.beakerx.kernel.KernelManager; import com.twosigma.beakerx.kernel.PathToJar; import com.twosigma.beakerx.scala.TestScalaEvaluator; import com.twosigma.beakerx.scala.kernel.ScalaKernelMock; - import com.twosigma.beakerx.widget.DisplayableWidget; import org.junit.After; import org.junit.AfterClass; diff --git a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaReprTest.java b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaReprTest.java new file mode 100644 index 0000000000..898e1c0e4f --- /dev/null +++ b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaReprTest.java @@ -0,0 +1,83 @@ +/* + * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.twosigma.beakerx.scala.evaluator; + +import com.twosigma.beakerx.TryResult; +import com.twosigma.beakerx.jvm.object.SimpleEvaluationObject; +import com.twosigma.beakerx.kernel.KernelManager; +import com.twosigma.beakerx.mimetype.MIMEContainer; +import com.twosigma.beakerx.scala.TestScalaEvaluator; +import com.twosigma.beakerx.scala.kernel.ScalaKernelMock; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static com.twosigma.beakerx.MessageFactorTest.commMsg; +import static org.assertj.core.api.Assertions.assertThat; + +public class ScalaReprTest { + + private static ScalaEvaluator scalaEvaluator; + + @BeforeClass + public static void setUpClass() throws Exception { + scalaEvaluator = TestScalaEvaluator.evaluator(); + } + + @Before + public void setUp() throws Exception { + ScalaKernelMock kernel = new ScalaKernelMock("id", scalaEvaluator); + KernelManager.register(kernel); + } + + @After + public void tearDown() throws Exception { + KernelManager.register(null); + } + + @AfterClass + public static void tearDownClass() throws Exception { + scalaEvaluator.exit(); + } + + @Test + public void unitObjectShouldBeRepresentedAsHIDDEN() { + //given + String code = "()"; + SimpleEvaluationObject seo = new SimpleEvaluationObject(code); + seo.setJupyterMessage(commMsg()); + //when + TryResult evaluate = scalaEvaluator.evaluate(seo, code); + //then + assertThat(((MIMEContainer) evaluate.result())).isEqualTo(MIMEContainer.HIDDEN); + } + + @Test + public void emptyStringShouldBeRepresentedAsEmptyString() { + //given + String code = "\"\""; + SimpleEvaluationObject seo = new SimpleEvaluationObject(code); + seo.setJupyterMessage(commMsg()); + //when + TryResult evaluate = scalaEvaluator.evaluate(seo, code); + //then + assertThat(evaluate.result()).isEqualTo(""); + } +} +