Skip to content

Commit

Permalink
Merge pull request #40 from Myrcon/issue-39
Browse files Browse the repository at this point in the history
Resolve Issue #39
  • Loading branch information
phogue committed Jan 19, 2014
2 parents 8a43a1b + 4f5e64a commit 8bc3c70
Show file tree
Hide file tree
Showing 92 changed files with 4,974 additions and 5,615 deletions.
3,366 changes: 3,366 additions & 0 deletions src/Myrcon.Protocols.Frostbite/Configs/Protocols/Myrcon/DiceBattlefield4.json

Large diffs are not rendered by default.

3,126 changes: 0 additions & 3,126 deletions src/Myrcon.Protocols.Frostbite/Configs/Protocols/Myrcon/DiceBattlefield4.xml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -99,12 +99,12 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="Configs\Protocols\Myrcon\DiceBattlefield4.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="README.txt" />
</ItemGroup>
<ItemGroup>
<Content Include="Configs\Protocols\Myrcon\DiceBattlefield4.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<None Include="Myrcon.Protocols.Frostbite.nuspec" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Expand Down
12 changes: 12 additions & 0 deletions src/Procon.Core.Shared.Test/Procon.Core.Shared.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.5.0.8\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="nunit.framework, Version=2.6.3.13283, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
</Reference>
Expand Down Expand Up @@ -62,6 +65,15 @@
<Compile Include="ExecutableCommands\TestExecutableProperties.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="AsynchronousExecutableCommands\TestAsynchronousCoreController.cs" />
<Compile Include="TestConfig\TestRootOf.cs" />
<Compile Include="TestConfig\TestAppend.cs" />
<Compile Include="TestConfig\TestLoadDirectoryInfo.cs" />
<Compile Include="TestConfig\Mocks\MockSimpleConcrete.cs" />
<Compile Include="TestConfig\TestConfigBase.cs" />
<Compile Include="TestConfig\TestCreate.cs" />
<Compile Include="TestConfig\TestLoadFileInfo.cs" />
<Compile Include="TestConfig\TestSave.cs" />
<Compile Include="TestConfig\TestUnion.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Procon.Core.Shared\Procon.Core.Shared.csproj">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using System;

namespace Procon.Core.Shared.Test.TestConfig.Mocks {
internal class MockSimpleConcrete {
public String Name { get; set; }
public int Age { get; set; }
}
}
32 changes: 32 additions & 0 deletions src/Procon.Core.Shared.Test/TestConfig/TestAppend.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System;
using NUnit.Framework;
using Newtonsoft.Json.Linq;
using Procon.Core.Shared.Test.TestConfig.Mocks;

namespace Procon.Core.Shared.Test.TestConfig {
[TestFixture]
public class TestAppend : TestConfigBase {
/// <summary>
/// Tests data can be appended to the root
/// </summary>
[Test]
public void TestAppendedToRoot() {
IConfig config = new JsonConfig().Create<MockSimpleConcrete>();
config.Append(new MockSimpleConcrete() {
Name = "Phogue",
Age = 100
});

Assert.AreEqual("Phogue", config.Root.First["Name"].Value<String>());
Assert.AreEqual(100, config.Root.First["Age"].Value<int>());
}

/// <summary>
/// Tests an argument null exception is raised if null is passed into union.
/// </summary>
[Test, ExpectedException(typeof(ArgumentNullException))]
public void TestNullException() {
new JsonConfig().Append<MockSimpleConcrete>(null);
}
}
}
40 changes: 40 additions & 0 deletions src/Procon.Core.Shared.Test/TestConfig/TestConfigBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System;
using System.IO;
using NUnit.Framework;

namespace Procon.Core.Shared.Test.TestConfig {
public abstract class TestConfigBase {
/// <summary>
/// Test file for us to save/load from.
/// </summary>
public FileInfo ConfigFileA = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs", "Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete.json"));

/// <summary>
/// Test file for us to save/load from.
/// </summary>
public FileInfo ConfigFileB = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs", "Procon.Core.Shared.Test.TestConfig.Mocks.AlternativeName.json"));

[SetUp]
public void ClearConfigDirectory() {
this.ConfigFileA.Refresh();

if (this.ConfigFileA.Directory != null) {
if (this.ConfigFileA.Directory.Exists == true) {
this.ConfigFileA.Directory.Delete(true);
}

this.ConfigFileA.Directory.Create();
}

this.ConfigFileB.Refresh();

if (this.ConfigFileB.Directory != null) {
if (this.ConfigFileB.Directory.Exists == true) {
this.ConfigFileB.Directory.Delete(true);
}

this.ConfigFileB.Directory.Create();
}
}
}
}
30 changes: 30 additions & 0 deletions src/Procon.Core.Shared.Test/TestConfig/TestCreate.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using NUnit.Framework;
using Newtonsoft.Json.Linq;
using Procon.Core.Shared.Test.TestConfig.Mocks;

namespace Procon.Core.Shared.Test.TestConfig {
[TestFixture]
public class TestCreate : TestConfigBase {
/// <summary>
/// Tests that the namespace is setup correctly.
/// </summary>
[Test]
public void TestStructureCreated() {
IConfig config = new JsonConfig().Create<MockSimpleConcrete>();

Assert.IsNotNull(config.Document);
Assert.IsNotNull(config.Document["Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"]);
Assert.IsNotNull(config.Document["Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"].Value<JArray>());
}

/// <summary>
/// Tests the root is set to the maximum document value.
/// </summary>
[Test]
public void TestRootMatchesNamespace() {
IConfig config = new JsonConfig().Create<MockSimpleConcrete>();

Assert.AreEqual(config.Document["Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"], config.Root);
}
}
}
126 changes: 126 additions & 0 deletions src/Procon.Core.Shared.Test/TestConfig/TestLoadDirectoryInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
using System;
using System.IO;
using NUnit.Framework;
using Newtonsoft.Json.Linq;

namespace Procon.Core.Shared.Test.TestConfig {
[TestFixture]
public class TestLoadDirectoryInfo : TestConfigBase {
/// <summary>
/// Tests that the document is populated after loading
/// </summary>
[Test]
public void TestSingleDocumentNotNull() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA.Directory);

Assert.IsNotNull(config.Document);
}

/// <summary>
/// Tests that the root is populated after loading
/// </summary>
[Test]
public void TestSingleRootNotNull() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA.Directory);

Assert.IsNotNull(config.Root);
}

/// <summary>
/// Tests that the root element is set if a property exists with the same filename.
/// </summary>
[Test]
public void TestSingleRootSetToFilePath() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA.Directory);

Assert.AreEqual("Phogue", config.Root.First["Name"].Value<String>());
Assert.AreEqual(100, config.Root.First["Age"].Value<int>());
}

/// <summary>
/// Tests that the document is populated after loading
/// </summary>
[Test]
public void TestUnionedDocumentNotNull() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");
File.WriteAllText(this.ConfigFileB.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.AlternativeName"": [ { ""Name"":""Ike"", ""Age"": 10 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA.Directory);

Assert.IsNotNull(config.Document);
}

/// <summary>
/// Tests that the root is populated after loading
/// </summary>
[Test]
public void TestUnionedRootNotNull() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");
File.WriteAllText(this.ConfigFileB.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.AlternativeName"": [ { ""Name"":""Ike"", ""Age"": 10 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA.Directory);

Assert.IsNotNull(config.Root);
}

/// <summary>
/// Tests that the root element is set if a property exists with the same filename.
/// Files are loaded in alphabetical order.
/// </summary>
[Test]
public void TestUnionedRootSetToFirstFilePath() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");
File.WriteAllText(this.ConfigFileB.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.AlternativeName"": [ { ""Name"":""Ike"", ""Age"": 10 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA.Directory);

Assert.AreEqual("Ike", config.Root.First["Name"].Value<String>());
Assert.AreEqual(10, config.Root.First["Age"].Value<int>());
}

/// <summary>
/// Tests that the document contains the alternative data
/// </summary>
[Test]
public void TestUnionedDocumentContainsAlternativeToRoot() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");
File.WriteAllText(this.ConfigFileB.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.AlternativeName"": [ { ""Name"":""Ike"", ""Age"": 10 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA.Directory);

Assert.AreEqual("Phogue", config.Document["Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"].First["Name"].Value<String>());
Assert.AreEqual(100, config.Document["Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"].First["Age"].Value<int>());
}

/// <summary>
/// Tests that the root element is set if a property exists with the same filename.
/// </summary>
[Test]
public void TestUnionedWithIdenticalNamespaces() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");
File.WriteAllText(this.ConfigFileB.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Ike"", ""Age"": 10 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA.Directory);

Assert.AreEqual("Ike", config.Root.First["Name"].Value<String>());
Assert.AreEqual(10, config.Root.First["Age"].Value<int>());

Assert.AreEqual("Phogue", config.Root.Last["Name"].Value<String>());
Assert.AreEqual(100, config.Root.Last["Age"].Value<int>());
}

/// <summary>
/// Tests an argument null exception is raised if null is passed into union.
/// </summary>
[Test, ExpectedException(typeof(ArgumentNullException))]
public void TestNullException() {
new JsonConfig().Load((DirectoryInfo)null);
}
}
}
115 changes: 115 additions & 0 deletions src/Procon.Core.Shared.Test/TestConfig/TestLoadFileInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
using System;
using System.IO;
using NUnit.Framework;
using Newtonsoft.Json.Linq;

namespace Procon.Core.Shared.Test.TestConfig {
[TestFixture]
public class TestLoadFileInfo : TestConfigBase {
/// <summary>
/// Tests that the document is populated after loading
/// </summary>
[Test]
public void TestDocumentNotNull() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA);

Assert.IsNotNull(config.Document);
}

/// <summary>
/// Tests that the root is populated after loading
/// </summary>
[Test]
public void TestRootNotNullWithMatchingProperty() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA);

Assert.IsNotNull(config.Root);
}

/// <summary>
/// Tests that the root is still populated even if no matching property is found. It
/// will then get the first property in the document.
/// </summary>
[Test]
public void TestRootNotNullWithoutMatchingProperty() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""This.Type.Does.Not.Exist"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA);

Assert.IsNotNull(config.Root);
}

/// <summary>
/// Tests that the root is still populated even if the resulting document is empty.
/// </summary>
[Test]
public void TestRootNotNullEmptyFile() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ }");

IConfig config = new JsonConfig().Load(this.ConfigFileA);

Assert.IsNotNull(config.Root);
}

/// <summary>
/// Tests that the root is still populated even if the first property is not an array
/// </summary>
[Test]
public void TestRootNotNullNotArray() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""This.Type.Does.Not.Exist"": { ""Name"":""Phogue"", ""Age"": 100 } }");

IConfig config = new JsonConfig().Load(this.ConfigFileA);

Assert.IsNotNull(config.Root);
}

/// <summary>
/// Tests that the root element is set if a property exists with the same filename.
/// </summary>
[Test]
public void TestRootSetToFilePath() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""Name"":""Phogue"", ""Age"": 100 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA);

Assert.AreEqual("Phogue", config.Root.First["Name"].Value<String>());
Assert.AreEqual(100, config.Root.First["Age"].Value<int>());
}

/// <summary>
/// Tests that invalid json will result in an empty document/root
/// </summary>
[Test]
public void TestInvalidJsonParsingNotNullRoot() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""N 100 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA);

Assert.IsNotNull(config.Root);
}

/// <summary>
/// Tests that invalid json will result in an empty document/root
/// </summary>
[Test]
public void TestInvalidJsonParsingNotNullDocument() {
File.WriteAllText(this.ConfigFileA.FullName, @"{ ""Procon.Core.Shared.Test.TestConfig.Mocks.MockSimpleConcrete"": [ { ""N 100 } ] }");

IConfig config = new JsonConfig().Load(this.ConfigFileA);

Assert.IsNotNull(config.Document);
}

/// <summary>
/// Tests an argument null exception is raised if null is passed into union.
/// </summary>
[Test, ExpectedException(typeof(ArgumentNullException))]
public void TestNullException() {
new JsonConfig().Load((FileInfo) null);
}
}
}
Loading

0 comments on commit 8bc3c70

Please sign in to comment.