From 24c58a58676c0cf9963a56b23898cca597b40911 Mon Sep 17 00:00:00 2001 From: Daniel Kraus Date: Sun, 21 Jun 2015 14:53:49 +0200 Subject: [PATCH] Implement base DictionaryBase with tests. --- Tests/Dictionaries/DictionaryTest.cs | 37 +++++++++ Tests/Dictionaries/TestDictionary.cs | 34 ++++++++ Tests/Dictionaries/test_dictionary.txt | 2 + Tests/Tests.csproj | 5 ++ zaaReloaded2/Dictionaries/DictionaryBase.cs | 83 ++++++++++++++++++- .../Dictionaries/ParameterDictionary.cs | 5 ++ zaaReloaded2/Dictionaries/UnitDictionary.cs | 4 + 7 files changed, 169 insertions(+), 1 deletion(-) create mode 100755 Tests/Dictionaries/DictionaryTest.cs create mode 100755 Tests/Dictionaries/TestDictionary.cs create mode 100755 Tests/Dictionaries/test_dictionary.txt diff --git a/Tests/Dictionaries/DictionaryTest.cs b/Tests/Dictionaries/DictionaryTest.cs new file mode 100755 index 0000000..5421666 --- /dev/null +++ b/Tests/Dictionaries/DictionaryTest.cs @@ -0,0 +1,37 @@ +/* Class1.cs + * part of zaaReloaded2 + * + * Copyright 2015 Daniel Kraus + * + * 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. + */ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; + +namespace Tests.Dictionaries +{ + [TestFixture] + class DictionaryTest + { + [Test] + public void DictionaryFromContentStream() + { + TestDictionary td = new TestDictionary(); + Assert.IsTrue(td.Records.ContainsKey("Field 1")); + Assert.AreEqual("Field 2", td.Records["Field 1"][1]); + } + } +} diff --git a/Tests/Dictionaries/TestDictionary.cs b/Tests/Dictionaries/TestDictionary.cs new file mode 100755 index 0000000..3bd7735 --- /dev/null +++ b/Tests/Dictionaries/TestDictionary.cs @@ -0,0 +1,34 @@ +/* TestDictionary.cs + * {{ + * part of zaaReloaded2 + * + * Copyright 2015 Daniel Kraus + * + * 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. + */ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +namespace Tests.Dictionaries +{ + class TestDictionary : zaaReloaded2.Dictionaries.DictionaryBase + { + protected override System.IO.Stream GetDefaultStream() + { + return Assembly.GetExecutingAssembly().GetManifestResourceStream("Tests.Dictionaries.test_dictionary.txt"); + } + } +} diff --git a/Tests/Dictionaries/test_dictionary.txt b/Tests/Dictionaries/test_dictionary.txt new file mode 100755 index 0000000..4d28483 --- /dev/null +++ b/Tests/Dictionaries/test_dictionary.txt @@ -0,0 +1,2 @@ +# This is a test file to test dictionaries +"Field 1" "Field 2" \ No newline at end of file diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 497a060..4f90ff6 100755 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -57,9 +57,11 @@ + + @@ -71,6 +73,9 @@ zaaReloaded2 + + + diff --git a/zaaReloaded2/Dictionaries/DictionaryBase.cs b/zaaReloaded2/Dictionaries/DictionaryBase.cs index 88aeabd..40a3643 100755 --- a/zaaReloaded2/Dictionaries/DictionaryBase.cs +++ b/zaaReloaded2/Dictionaries/DictionaryBase.cs @@ -17,6 +17,7 @@ */ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; @@ -27,7 +28,87 @@ namespace zaaReloaded2.Dictionaries /// and the ; implements methods /// to read configuration files. /// - abstract class DictionaryBase + public abstract class DictionaryBase { + #region Public properties + + public SortedDictionary Records { get; protected set; } + + #endregion + + #region Constructor + + public DictionaryBase() + { + Records = new SortedDictionary(); + LoadDefaultValues(); + } + + #endregion + + #region Abstract methods + + /// + /// Returns a content stream with a default configuration file. + /// + abstract protected Stream GetDefaultStream(); + + #endregion + + #region Protected methods + + /// + /// Reads a text file from a TextReader and fills the dictionary + /// with the data. + /// + /// TextReader that provides a text file. + protected void ReadFile(TextReader text) + { + LineParser lp = new LineParser(); + string line; + string key; + while ((line = text.ReadLine()) != null) + { + lp.Line = line; + if (lp.HasFields) + { + key = lp.Fields[0]; + if (Records.ContainsKey(key)) + { + Records[key] = lp.Fields; + } + else + { + Records.Add(key, lp.Fields); + } + } + } + } + + /// + /// Reads a text file from a stream and fills the dictionary + /// with the data. + /// + /// TextReader that provides a text file. + protected void ReadFile(Stream stream) + { + StreamReader sr = new StreamReader(stream); + ReadFile(sr); + } + + #endregion + + #region Private methods + + /// + /// Loads default dictionary values from a text file that is built + /// into the assembly as an embbedded resource. + /// + private void LoadDefaultValues() + { + ReadFile(GetDefaultStream()); + } + + #endregion } } diff --git a/zaaReloaded2/Dictionaries/ParameterDictionary.cs b/zaaReloaded2/Dictionaries/ParameterDictionary.cs index 4a13252..6c0c3d2 100755 --- a/zaaReloaded2/Dictionaries/ParameterDictionary.cs +++ b/zaaReloaded2/Dictionaries/ParameterDictionary.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Text; namespace zaaReloaded2.Dictionaries @@ -29,5 +30,9 @@ namespace zaaReloaded2.Dictionaries /// class ParameterDictionary : DictionaryBase { + protected override System.IO.Stream GetDefaultStream() + { + return Assembly.GetExecutingAssembly().GetManifestResourceStream(""); + } } } diff --git a/zaaReloaded2/Dictionaries/UnitDictionary.cs b/zaaReloaded2/Dictionaries/UnitDictionary.cs index 2257eee..e0225e9 100755 --- a/zaaReloaded2/Dictionaries/UnitDictionary.cs +++ b/zaaReloaded2/Dictionaries/UnitDictionary.cs @@ -28,5 +28,9 @@ namespace zaaReloaded2.Dictionaries /// class UnitDictionary : DictionaryBase { + protected override System.IO.Stream GetDefaultStream() + { + throw new NotImplementedException(); + } } }