From a33e4ef0e6b72a12e775a8efc823b5d547190565 Mon Sep 17 00:00:00 2001 From: gabilang Date: Tue, 31 Oct 2023 14:27:29 +0530 Subject: [PATCH 1/2] Fix toString method of FutureValue --- .../runtime/internal/values/FutureValue.java | 3 ++- .../types/string/BStringToStringTest.java | 12 ++++++++++ .../types/string/bstring-tostring-test.bal | 23 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/values/FutureValue.java b/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/values/FutureValue.java index a9c26ee2bcbb..cef244aa3c6e 100644 --- a/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/values/FutureValue.java +++ b/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/values/FutureValue.java @@ -24,6 +24,7 @@ import io.ballerina.runtime.api.values.BTypedesc; import io.ballerina.runtime.internal.scheduling.Strand; import io.ballerina.runtime.internal.types.BFutureType; + import io.ballerina.runtime.internal.util.StringUtils; import java.util.Map; import java.util.StringJoiner; @@ -68,7 +69,7 @@ public String stringValue(BLink parent) { StringJoiner sj = new StringJoiner(",", "{", "}"); sj.add("isDone:" + isDone); if (isDone) { - sj.add("result:" + result.toString()); + sj.add("result:" + StringUtils.getExpressionStringVal(result, parent)); } if (panic != null) { sj.add("panic:" + panic.getLocalizedMessage()); diff --git a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/types/string/BStringToStringTest.java b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/types/string/BStringToStringTest.java index a4a9295e5478..6a874c6a23d6 100644 --- a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/types/string/BStringToStringTest.java +++ b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/types/string/BStringToStringTest.java @@ -19,8 +19,10 @@ package org.ballerinalang.test.types.string; import org.ballerinalang.test.BCompileUtil; +import org.ballerinalang.test.BRunUtil; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** @@ -78,6 +80,16 @@ public void testArrayValueToString() { testAndAssert("testArrayValueToString", 30); } + @Test(dataProvider = "functionsToTestToString") + public void testFutureValueToString(String functionName) { + BRunUtil.invoke(result, functionName); + } + + @DataProvider(name = "functionsToTestToString") + public String[] toStringTestFunctions() { + return new String[]{"testFutureValueToString", "testFutureValueToStringWithNilReturn"}; + } + @AfterClass public void tearDown() { result = null; diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/types/string/bstring-tostring-test.bal b/tests/jballerina-unit-test/src/test/resources/test-src/types/string/bstring-tostring-test.bal index 5c42e6cfac7d..580723cb5eb8 100644 --- a/tests/jballerina-unit-test/src/test/resources/test-src/types/string/bstring-tostring-test.bal +++ b/tests/jballerina-unit-test/src/test/resources/test-src/types/string/bstring-tostring-test.bal @@ -13,7 +13,10 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. + +import ballerina/lang.runtime; import ballerina/lang.value; +import ballerina/test; function testDecimalToString() returns int { decimal res3 = 8; @@ -74,3 +77,23 @@ function testArrayValueToString() returns int { string[][] arr2 = [["h🤷llo", "h🤷llo", "h🤷llo"], ["h🤷llo", "h🤷llo", "h🤷llo"]]; return arr2[0].toString().length() + arr2[0][1].toString().length(); } + +function testFutureValueToString() { + future f = start isEven(2); + runtime:sleep(1); + string s = f.toString(); + test:assertEquals(s, "future {isDone:true,result:true}"); +} + +function isEven(int n) returns boolean { + return n % 2 == 0; +} + +function testFutureValueToStringWithNilReturn() { + future<()> f = start addName(); + runtime:sleep(1); + string s = f.toString(); + test:assertEquals(s, "future {isDone:true,result:()}"); +} + +function addName() {} From 981d2d75ba39377d01bec032fc46703bfbe594b3 Mon Sep 17 00:00:00 2001 From: gabilang Date: Tue, 31 Oct 2023 16:53:37 +0530 Subject: [PATCH 2/2] Use implementation dependent direct representation --- .../java/io/ballerina/runtime/internal/values/FutureValue.java | 2 +- .../resources/test-src/types/string/bstring-tostring-test.bal | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/values/FutureValue.java b/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/values/FutureValue.java index cef244aa3c6e..76709936a568 100644 --- a/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/values/FutureValue.java +++ b/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/values/FutureValue.java @@ -69,7 +69,7 @@ public String stringValue(BLink parent) { StringJoiner sj = new StringJoiner(",", "{", "}"); sj.add("isDone:" + isDone); if (isDone) { - sj.add("result:" + StringUtils.getExpressionStringVal(result, parent)); + sj.add("result:" + StringUtils.getStringVal(result, parent)); } if (panic != null) { sj.add("panic:" + panic.getLocalizedMessage()); diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/types/string/bstring-tostring-test.bal b/tests/jballerina-unit-test/src/test/resources/test-src/types/string/bstring-tostring-test.bal index 580723cb5eb8..74ce41f486fc 100644 --- a/tests/jballerina-unit-test/src/test/resources/test-src/types/string/bstring-tostring-test.bal +++ b/tests/jballerina-unit-test/src/test/resources/test-src/types/string/bstring-tostring-test.bal @@ -93,7 +93,7 @@ function testFutureValueToStringWithNilReturn() { future<()> f = start addName(); runtime:sleep(1); string s = f.toString(); - test:assertEquals(s, "future {isDone:true,result:()}"); + test:assertEquals(s, "future {isDone:true,result:}"); } function addName() {}