Implement base DictionaryBase with tests.

This commit is contained in:
Daniel Kraus 2015-06-21 14:53:49 +02:00
parent 9e0f8a85ae
commit 24c58a5867
7 changed files with 169 additions and 1 deletions

View File

@ -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]);
}
}
}

View File

@ -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");
}
}
}

View File

@ -0,0 +1,2 @@
# This is a test file to test dictionaries
"Field 1" "Field 2"

View File

@ -57,9 +57,11 @@
</Otherwise>
</Choose>
<ItemGroup>
<Compile Include="Dictionaries\DictionaryTest.cs" />
<Compile Include="LabItemTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="LineParserTest.cs" />
<Compile Include="Dictionaries\TestDictionary.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
@ -71,6 +73,9 @@
<Name>zaaReloaded2</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Dictionaries\test_dictionary.txt" />
</ItemGroup>
<Choose>
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
<ItemGroup>

View File

@ -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 <see cref="UnitDictionary"/>; implements methods
/// to read configuration files.
/// </summary>
abstract class DictionaryBase
public abstract class DictionaryBase
{
#region Public properties
public SortedDictionary<string, string[]> Records { get; protected set; }
#endregion
#region Constructor
public DictionaryBase()
{
Records = new SortedDictionary<string, string[]>();
LoadDefaultValues();
}
#endregion
#region Abstract methods
/// <summary>
/// Returns a content stream with a default configuration file.
/// </summary>
abstract protected Stream GetDefaultStream();
#endregion
#region Protected methods
/// <summary>
/// Reads a text file from a TextReader and fills the dictionary
/// with the data.
/// </summary>
/// <param name="s">TextReader that provides a text file.</param>
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);
}
}
}
}
/// <summary>
/// Reads a text file from a stream and fills the dictionary
/// with the data.
/// </summary>
/// <param name="s">TextReader that provides a text file.</param>
protected void ReadFile(Stream stream)
{
StreamReader sr = new StreamReader(stream);
ReadFile(sr);
}
#endregion
#region Private methods
/// <summary>
/// Loads default dictionary values from a text file that is built
/// into the assembly as an embbedded resource.
/// </summary>
private void LoadDefaultValues()
{
ReadFile(GetDefaultStream());
}
#endregion
}
}

View File

@ -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
/// </summary>
class ParameterDictionary : DictionaryBase
{
protected override System.IO.Stream GetDefaultStream()
{
return Assembly.GetExecutingAssembly().GetManifestResourceStream("");
}
}
}

View File

@ -28,5 +28,9 @@ namespace zaaReloaded2.Dictionaries
/// </summary>
class UnitDictionary : DictionaryBase
{
protected override System.IO.Stream GetDefaultStream()
{
throw new NotImplementedException();
}
}
}