From 46478b61a38f85efdb5b67de1c2d3b5ac33793a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Wa=C5=9Bko?= Date: Sat, 9 Dec 2023 23:53:59 +0100 Subject: [PATCH] more general workaround for bug https://github.com/enso-org/enso/issues/7117 --- .../Test/0.0.0-dev/src/Test_Environment.enso | 9 ++++++++- .../main/java/org/enso/base/Environment_Utils.java | 12 ++++++++++++ test/AWS_Tests/src/Enso_Cloud_Spec.enso | 10 +++++----- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/distribution/lib/Standard/Test/0.0.0-dev/src/Test_Environment.enso b/distribution/lib/Standard/Test/0.0.0-dev/src/Test_Environment.enso index 296ab2f8308f6..369605e4ad623 100644 --- a/distribution/lib/Standard/Test/0.0.0-dev/src/Test_Environment.enso +++ b/distribution/lib/Standard/Test/0.0.0-dev/src/Test_Environment.enso @@ -12,4 +12,11 @@ polyglot java import org.enso.base.Environment_Utils `System.getenv` Java call remains unchanged. unsafe_with_environment_override : Text -> Text -> Any -> Any unsafe_with_environment_override key value ~action = - Environment_Utils.with_environment_variable_override key value (_->action) + ## This has to be done in Enso, not in Java, due to the bug: https://github.com/enso-org/enso/issues/7117 + If done in Java, Enso test functions do not work correctly, because they cannot access State. + old_value = Environment_Utils.getOverride key + restore_previous = + if old_value.is_nothing then Environment_Utils.removeOverride key else Environment_Utils.setOverride key old_value + Panic.with_finalizer restore_previous <| + Environment_Utils.setOverride key value + action diff --git a/std-bits/base/src/main/java/org/enso/base/Environment_Utils.java b/std-bits/base/src/main/java/org/enso/base/Environment_Utils.java index 93fc49ef14f2e..255e7e4792112 100644 --- a/std-bits/base/src/main/java/org/enso/base/Environment_Utils.java +++ b/std-bits/base/src/main/java/org/enso/base/Environment_Utils.java @@ -40,5 +40,17 @@ public static T with_environment_variable_override( } } + public static void setOverride(String name, String value) { + overrides.put(name, value); + } + + public static void removeOverride(String name) { + overrides.remove(name); + } + + public static String getOverride(String name) { + return overrides.get(name); + } + private static final HashMap overrides = new HashMap<>(); } diff --git a/test/AWS_Tests/src/Enso_Cloud_Spec.enso b/test/AWS_Tests/src/Enso_Cloud_Spec.enso index eb58e11757e5b..7168444e14aa0 100644 --- a/test/AWS_Tests/src/Enso_Cloud_Spec.enso +++ b/test/AWS_Tests/src/Enso_Cloud_Spec.enso @@ -24,10 +24,10 @@ spec = with_mock_environment ~action = Test_Environment.unsafe_with_environment_override "ENSO_CLOUD_API_URI" enso_cloud_url <| action - - Test.group "Enso Cloud Basic Utils" pending=pending_has_url <| - Test.specify "should be able to get the cloud URL from environment" <| with_mock_environment <| - api_url = Cloud_Utils.cloud_root_uri - api_url.should_equal enso_cloud_url + with_mock_environment <| + Test.group "Enso Cloud Basic Utils" pending=pending_has_url <| + Test.specify "should be able to get the cloud URL from environment" <| + api_url = Cloud_Utils.cloud_root_uri + api_url.should_equal enso_cloud_url main = Test_Suite.run_main spec