From 1d01ac32ef8bb722a6ac979f9dcf487432c3f66a Mon Sep 17 00:00:00 2001 From: Dor Blayzer Date: Wed, 25 Sep 2024 22:57:58 +0300 Subject: [PATCH 1/4] build(deps): Migration from `Newtonsoft.Json` to `System.Text.Json` package --- test/integration/Appium.Net.Integration.Tests.csproj | 2 +- test/integration/helpers/Env.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/integration/Appium.Net.Integration.Tests.csproj b/test/integration/Appium.Net.Integration.Tests.csproj index c2cceadc2..56db6f627 100644 --- a/test/integration/Appium.Net.Integration.Tests.csproj +++ b/test/integration/Appium.Net.Integration.Tests.csproj @@ -16,7 +16,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/test/integration/helpers/Env.cs b/test/integration/helpers/Env.cs index f9fca01a5..e0513bf49 100644 --- a/test/integration/helpers/Env.cs +++ b/test/integration/helpers/Env.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.IO; -using Newtonsoft.Json; +using System.Text.Json; namespace Appium.Net.Integration.Tests.helpers { @@ -23,12 +23,12 @@ private static void Init() var path = AppDomain.CurrentDomain.BaseDirectory; var sr = new StreamReader(path + "env.json"); var jsonString = sr.ReadToEnd(); - _env = JsonConvert.DeserializeObject>(jsonString); + _env = JsonSerializer.Deserialize>(jsonString); } } catch { - _env = new Dictionary(); + _env = []; } } From a977a1fbb688ec5b2f36f0f9ed7a5aa1f4aef579 Mon Sep 17 00:00:00 2001 From: Dor Blayzer Date: Wed, 25 Sep 2024 23:31:52 +0300 Subject: [PATCH 2/4] fix: deserialization issues with System.Text.Json and improve environment variable handling --- test/integration/helpers/Env.cs | 34 +++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/test/integration/helpers/Env.cs b/test/integration/helpers/Env.cs index e0513bf49..e62a68e67 100644 --- a/test/integration/helpers/Env.cs +++ b/test/integration/helpers/Env.cs @@ -10,7 +10,7 @@ public class Env public static TimeSpan InitTimeoutSec = TimeSpan.FromSeconds(180); public static TimeSpan ImplicitTimeoutSec = TimeSpan.FromSeconds(10); - private static Dictionary _env; + private static Dictionary _env; private static bool _initialized; private static void Init() @@ -23,19 +23,28 @@ private static void Init() var path = AppDomain.CurrentDomain.BaseDirectory; var sr = new StreamReader(path + "env.json"); var jsonString = sr.ReadToEnd(); - _env = JsonSerializer.Deserialize>(jsonString); + _env = JsonSerializer.Deserialize>(jsonString, new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }); } } - catch + catch (JsonException jsonEx) { + Console.WriteLine($"Error parsing JSON: {jsonEx.Message}"); + _env = []; + } + catch (Exception ex) + { + Console.WriteLine($"Error initializing environment: {ex.Message}"); _env = []; } } - private static bool IsTrue(string val) + private static bool IsTrue(object val) { - val = val?.ToLower().Trim(); - return (val == "true") || (val == "1"); + val = val?.ToString().ToLower().Trim(); + return val is (object)"true" or (object)"1"; } public static bool ServerIsRemote() @@ -52,9 +61,18 @@ public static bool ServerIsLocal() public static string GetEnvVar(string name) { - if (_env.ContainsKey(name) && (_env[name] != null)) + if (_env.ContainsKey(name)) { - return _env[name]; + JsonElement element = _env[name]; + + return element.ValueKind switch + { + JsonValueKind.String => element.GetString(), + JsonValueKind.Number => element.GetRawText(), + JsonValueKind.True or JsonValueKind.False => element.GetRawText(), + JsonValueKind.Null => null, + _ => element.GetRawText() + }; } return Environment.GetEnvironmentVariable(name); } From 636b0f61e51480fdb5868782483048bc7d7840b3 Mon Sep 17 00:00:00 2001 From: Dor Blayzer Date: Sat, 28 Sep 2024 19:34:00 +0300 Subject: [PATCH 3/4] change string comparison to use Equals --- test/integration/helpers/Env.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/helpers/Env.cs b/test/integration/helpers/Env.cs index e62a68e67..7900715a3 100644 --- a/test/integration/helpers/Env.cs +++ b/test/integration/helpers/Env.cs @@ -44,7 +44,7 @@ private static void Init() private static bool IsTrue(object val) { val = val?.ToString().ToLower().Trim(); - return val is (object)"true" or (object)"1"; + return val.Equals("true") || val.Equals("1"); } public static bool ServerIsRemote() From 9d99a6e3bfe43c92a1d3370bb662b6f854bae102 Mon Sep 17 00:00:00 2001 From: Dor Blayzer Date: Sat, 28 Sep 2024 20:09:05 +0300 Subject: [PATCH 4/4] add parentheses for clarity init _env with default values add Guard clause to exit early if already initialized --- test/integration/helpers/Env.cs | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/test/integration/helpers/Env.cs b/test/integration/helpers/Env.cs index 7900715a3..d977b1e9b 100644 --- a/test/integration/helpers/Env.cs +++ b/test/integration/helpers/Env.cs @@ -15,29 +15,33 @@ public class Env private static void Init() { + _env = new Dictionary + { + { "DEV", JsonDocument.Parse("true").RootElement }, + { "isRemoteAppiumServer", JsonDocument.Parse("false").RootElement }, + { "remoteAppiumServerUri", JsonDocument.Parse("\"http://localhost:4723\"").RootElement } + }; + + if (_initialized) return; + try { - if (!_initialized) + _initialized = true; + var path = AppDomain.CurrentDomain.BaseDirectory; + var sr = new StreamReader(path + "env.json"); + var jsonString = sr.ReadToEnd(); + _env = JsonSerializer.Deserialize>(jsonString, new JsonSerializerOptions { - _initialized = true; - var path = AppDomain.CurrentDomain.BaseDirectory; - var sr = new StreamReader(path + "env.json"); - var jsonString = sr.ReadToEnd(); - _env = JsonSerializer.Deserialize>(jsonString, new JsonSerializerOptions - { - PropertyNameCaseInsensitive = true - }); - } + PropertyNameCaseInsensitive = true + }); } catch (JsonException jsonEx) { Console.WriteLine($"Error parsing JSON: {jsonEx.Message}"); - _env = []; } catch (Exception ex) { Console.WriteLine($"Error initializing environment: {ex.Message}"); - _env = []; } } @@ -56,7 +60,7 @@ public static bool ServerIsRemote() public static bool ServerIsLocal() { Init(); - return _env.ContainsKey("DEV") && IsTrue(_env["DEV"]) || IsTrue(Environment.GetEnvironmentVariable("DEV")); + return (_env.ContainsKey("DEV") && IsTrue(_env["DEV"])) || IsTrue(Environment.GetEnvironmentVariable("DEV")); } public static string GetEnvVar(string name) @@ -74,7 +78,7 @@ public static string GetEnvVar(string name) _ => element.GetRawText() }; } - return Environment.GetEnvironmentVariable(name); + return Environment.GetEnvironmentVariable(name); } } } \ No newline at end of file