2 Commits 31653bb3f1 ... 7ed650ef91

Author SHA1 Message Date
  Piotr Czajkowski 7ed650ef91 Added ExtractText_AllGood 2 years ago
  Piotr Czajkowski ac1a7368d6 Added ExtractText_NullKeys 2 years ago
2 changed files with 76 additions and 0 deletions
  1. 37 0
      analyzeJSON/ExtractText.cs
  2. 39 0
      analyzeJSONTests/ExtractTextUnitTests.cs

+ 37 - 0
analyzeJSON/ExtractText.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using Newtonsoft.Json.Linq;
+
+namespace analyzeJSON
+{
+    public class ExtractText
+    {
+        private readonly Dictionary<string, bool> keysToExtract;
+        private readonly Dictionary<string, List<string>> extracted = new();
+
+        public ExtractText(Dictionary<string, bool> keys)
+        {
+            keysToExtract = keys ?? throw new ArgumentNullException(nameof(keys));
+        }
+
+        public void Extract(JToken token)
+        {
+            if (token.Type != JTokenType.String)
+                return;
+
+            var tokenName = AnalyzeJSON.GetNameFromPath(token.Path);
+            if (string.IsNullOrWhiteSpace(tokenName))
+                return;
+
+            if (!keysToExtract.ContainsKey(tokenName))
+                return;
+
+            if (!extracted.ContainsKey(tokenName))
+                extracted.Add(tokenName, new List<string>());
+
+            extracted[tokenName].Add(token.Value<string>());
+        }
+
+        public Dictionary<string, List<string>> Result => extracted;
+    }
+}

+ 39 - 0
analyzeJSONTests/ExtractTextUnitTests.cs

@@ -0,0 +1,39 @@
+using Xunit;
+using analyzeJSON;
+using System;
+using System.Collections.Generic;
+using Newtonsoft.Json.Linq;
+
+namespace analyzeJSONTests
+{
+    public class ExtractTextUnitTests
+    {
+        [Fact]
+        public void ExtractText_NullKeys()
+        {
+            Assert.Throws<ArgumentNullException>(() => new ExtractText(null));
+        }
+
+        [Fact]
+        public void ExtractText_AllGood()
+        {
+            dynamic token = new JObject();
+            token.one = "Lorem ipsum dolor";
+            token.two = "Lorem      ipsum dolor";
+            token.three = "Lorem\nipsum dolor";
+
+            var keys = new Dictionary<string, bool>
+            {
+                ["one"] = true,
+                ["two"] = false
+            };
+
+            var test = new ExtractText(keys);
+            test.Extract(token.one);
+            test.Extract(token.two);
+            test.Extract(token.three);
+
+            Assert.Equal(2, test.Result.Count);
+        }
+    }
+}