Skip to content

Commit

Permalink
Add more unit tests for open and save of files
Browse files Browse the repository at this point in the history
  • Loading branch information
DocMoebiuz committed Feb 25, 2025
1 parent 45ba2be commit 7148e7c
Show file tree
Hide file tree
Showing 12 changed files with 384 additions and 33 deletions.
10 changes: 5 additions & 5 deletions Base/ConfigFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class ConfigFile : IConfigFile
{
public string FileName { get; set; }
public bool ReferenceOnly { get; set; } = false;
public bool EmbedContent { get; set; } = true;
public bool EmbedContent { get; set; } = false;
public List<IConfigItem> ConfigItems { get; set; } = new List<IConfigItem>();

public ConfigFile() { }
Expand Down Expand Up @@ -58,10 +58,10 @@ public override bool Equals(object obj)
var other = obj as ConfigFile;

return
this.FileName.AreEqual(other.FileName) &&
this.ReferenceOnly == other.ReferenceOnly &&
this.EmbedContent == other.EmbedContent &&
this.ConfigItems.SequenceEqual(other.ConfigItems)
FileName.AreEqual(other.FileName) &&
ReferenceOnly == other.ReferenceOnly &&
EmbedContent == other.EmbedContent &&
ConfigItems.SequenceEqual(other.ConfigItems)
;
}
}
Expand Down
3 changes: 0 additions & 3 deletions Base/ConfigRefList.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MobiFlight.Base
{
Expand Down
3 changes: 2 additions & 1 deletion Base/Precondition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class Precondition : IXmlSerializable, ICloneable
public const string LOGIC_OR = "or";

private string preconditionLabel = null;

public string PreconditionLabel {
get {
if (preconditionLabel != null) return preconditionLabel;
Expand Down Expand Up @@ -154,7 +155,7 @@ public override bool Equals(object obj)
PreconditionOperand == (obj as Precondition).PreconditionOperand &&
PreconditionValue == (obj as Precondition).PreconditionValue &&
PreconditionLogic == (obj as Precondition).PreconditionLogic &&
preconditionLabel == (obj as Precondition).preconditionLabel
PreconditionLabel == (obj as Precondition).PreconditionLabel
;
}

Expand Down
4 changes: 1 addition & 3 deletions MobiFlight/OutputConfigItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,6 @@ public void WriteXml(XmlWriter writer, bool writeInstanceData)
if (Device is LedModule)
{
(Device as LedModule).WriteXml(writer);

}
else if (DeviceType == MobiFlightServo.TYPE)
{
Expand All @@ -331,7 +330,6 @@ public void WriteXml(XmlWriter writer, bool writeInstanceData)
}
else if (DeviceType == MobiFlightLcdDisplay.TYPE)
{
Device = new OutputConfig.LcdDisplay();
(Device as LcdDisplay).WriteXml(writer);
}
else if (DeviceType == MobiFlightShiftRegister.TYPE)
Expand Down Expand Up @@ -359,7 +357,7 @@ public void WriteXml(XmlWriter writer, bool writeInstanceData)
}
else if (DeviceType == MobiFlightOutput.TYPE)
{
(Device as OutputConfig.Output).WriteXml(writer);
(Device as Output).WriteXml(writer);
}

writer.WriteEndElement(); // end of display
Expand Down
75 changes: 75 additions & 0 deletions MobiFlightUnitTests/Base/ConfigFileFactoryTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MobiFlight.Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MobiFlight.Base.Tests
{
[TestClass()]
public class ConfigFileFactoryTests
{
[TestMethod()]
public void CreateConfigFileTest()
{
var testFile = @"assets/Base/ConfigFile/OpenFileTest.LCD-serialization-bc.mcc";
var configFile = ConfigFileFactory.CreateConfigFile(testFile);

configFile.OpenFile();
Assert.IsTrue(configFile.ConfigItems.Count > 0);

testFile = @"assets/Base/ConfigFile/Json/OpenConfig.mfjson";
configFile = ConfigFileFactory.CreateConfigFile(testFile);
configFile.OpenFile();
Assert.IsTrue(configFile.ConfigItems.Count == 3);
}

[TestMethod]
public void ConfigFile_BackwardCompatibility_Test()
{
var testFile = @"assets/Base/ConfigFile/OpenFileTest.LCD-serialization-bc.mcc";
var configFile = new DeprecatedConfigFile { FileName = testFile };
configFile.OpenFile();

var newConfigFile = new ConfigFile()
{
FileName = testFile,
ReferenceOnly = configFile.ReferenceOnly,
EmbedContent = false,
ConfigItems = configFile.ConfigItems
};

var testFileOut = @"assets/Base/ConfigFile/OpenFileTest.LCD-serialization-bc.mfjson";
newConfigFile.FileName = testFileOut;
newConfigFile.SaveFile();

CollectionAssert.AreEqual(configFile.ConfigItems, newConfigFile.ConfigItems);

var configFileOut = ConfigFileFactory.CreateConfigFile(testFileOut);
configFileOut.OpenFile();
configFileOut.FileName = testFileOut;

Assert.AreEqual(configFile.ConfigItems[0].Name, configFileOut.ConfigItems[0].Name);
Assert.AreEqual(configFile.ConfigItems[0].Value, configFileOut.ConfigItems[0].Value);
Assert.AreEqual(configFile.ConfigItems[0].RawValue, configFileOut.ConfigItems[0].RawValue);
Assert.AreEqual(configFile.ConfigItems[0].Device, configFileOut.ConfigItems[0].Device);
Assert.AreEqual(configFile.ConfigItems[0].GUID, configFileOut.ConfigItems[0].GUID);
Assert.AreEqual(configFile.ConfigItems[0].Type, configFileOut.ConfigItems[0].Type);
Assert.AreEqual(configFile.ConfigItems[0].Active, configFileOut.ConfigItems[0].Active);
Assert.AreEqual(configFile.ConfigItems[0].ConfigRefs, configFileOut.ConfigItems[0].ConfigRefs);
Assert.AreEqual(configFile.ConfigItems[0].Modifiers, configFileOut.ConfigItems[0].Modifiers);
Assert.AreEqual(configFile.ConfigItems[0].ModuleSerial, configFileOut.ConfigItems[0].ModuleSerial);
Assert.AreEqual(configFile.ConfigItems[0].Preconditions, configFileOut.ConfigItems[0].Preconditions);

Assert.IsTrue(configFileOut.ConfigItems.Count > 0);
for (int i = 0; i < configFile.ConfigItems.Count; i++)
{
Assert.AreEqual(configFile.ConfigItems[i], configFileOut.ConfigItems[i]);
}

Assert.AreEqual(newConfigFile, configFileOut);
}
}
}
35 changes: 33 additions & 2 deletions MobiFlightUnitTests/Base/ConfigFileTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MobiFlight.Base;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MobiFlight.OutputConfig;
using Newtonsoft.Json;
using System.Collections.Generic;
Expand All @@ -11,7 +12,6 @@ public class ConfigFileTests
{
private const string TestFileName = "testConfigFile.json";


private OutputConfigItem CreateOutputConfigItem()
{
return new OutputConfigItem()
Expand Down Expand Up @@ -145,5 +145,36 @@ public void ConfigFile_SaveFile_Test()
Assert.AreEqual(configFile.EmbedContent, deserializedConfigFile.EmbedContent);
Assert.AreEqual(configFile.ConfigItems.Count, deserializedConfigFile.ConfigItems.Count);
}

[TestMethod()]
public void EqualsTest()
{
var configFile = new ConfigFile
{
FileName = TestFileName,
ReferenceOnly = false,
EmbedContent = false,
ConfigItems = new List<IConfigItem>()
{
CreateOutputConfigItem(),
CreateInputConfigItem()
}
};

var configFile2 = new ConfigFile
{
FileName = TestFileName,
ReferenceOnly = false,
EmbedContent = false,
ConfigItems = new List<IConfigItem>()
{
configFile.ConfigItems[0].Clone() as OutputConfigItem,
configFile.ConfigItems[1].Clone() as InputConfigItem
}
};

Assert.IsTrue(configFile.Equals(configFile2));
Assert.AreEqual(configFile, configFile2);
}
}
}
72 changes: 53 additions & 19 deletions MobiFlightUnitTests/Base/ConfigItemTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MobiFlight.Base;
using MobiFlight.Modifier;
using MobiFlight.OutputConfig;
using System;
using System.Collections.Generic;
using System.Linq;
Expand All @@ -11,65 +13,97 @@ namespace MobiFlight.Base.Tests
[TestClass()]
public class ConfigItemTests
{
[TestMethod()]
public void DuplicateTest()
Precondition CreatePrecondition()
{
return new Precondition();
}
IConfigItem CreateOutputConfigItem()
{
var OutputConfigItem = new OutputConfigItem()
var PreconditionList = new PreconditionList
{
Name = "Test1"
CreatePrecondition()
};

var ModifierList = new ModifierList();
ModifierList.Items.Add(new Comparison());
ModifierList.Items.Add(new Transformation());

var ConfigRefList = new ConfigRefList();
ConfigRefList.Add(new ConfigRef() { Active = true, Placeholder = "#", Ref = "123", TestValue = "0" });

return new OutputConfigItem()
{
Name = "Test1",
Device = new LedModule() { DisplayLedAddress = "0", DisplayLedConnector = 1 },
Active = true,
Preconditions = PreconditionList,
Modifiers = ModifierList,
ConfigRefs = ConfigRefList
};
}

[TestMethod()]
public void DuplicateTest()
{
var OutputConfigItem = CreateOutputConfigItem() as OutputConfigItem;

var duplicatedConfigItem = OutputConfigItem.Duplicate() as OutputConfigItem;

Assert.IsNotNull(duplicatedConfigItem);
Assert.AreEqual(OutputConfigItem.Name, duplicatedConfigItem.Name);
Assert.AreNotEqual(OutputConfigItem.GUID, duplicatedConfigItem.GUID);
Assert.AreEqual(OutputConfigItem.Device, duplicatedConfigItem.Device);
Assert.AreEqual(OutputConfigItem.Active, duplicatedConfigItem.Active);
Assert.AreEqual(OutputConfigItem.Preconditions, duplicatedConfigItem.Preconditions);
Assert.AreEqual(OutputConfigItem.Modifiers, duplicatedConfigItem.Modifiers);
Assert.AreEqual(OutputConfigItem.ConfigRefs, duplicatedConfigItem.ConfigRefs);
}

[TestMethod()]
public void CloneTest()
{
var OutputConfigItem = new OutputConfigItem()
{
Name = "Test1"
};
var OutputConfigItem = CreateOutputConfigItem();

var ClonedConfigItem = OutputConfigItem.Clone() as OutputConfigItem;

Assert.IsNotNull(ClonedConfigItem);
Assert.AreEqual(OutputConfigItem.Name, ClonedConfigItem.Name);
Assert.AreEqual(OutputConfigItem.GUID, ClonedConfigItem.GUID);
Assert.AreEqual(OutputConfigItem.Device, ClonedConfigItem.Device);
Assert.AreEqual(OutputConfigItem.Active, ClonedConfigItem.Active);
Assert.AreEqual(OutputConfigItem.Preconditions, ClonedConfigItem.Preconditions);
Assert.AreEqual(OutputConfigItem.Modifiers, ClonedConfigItem.Modifiers);
Assert.AreEqual(OutputConfigItem.ConfigRefs, ClonedConfigItem.ConfigRefs);
}

[TestMethod()]
public void EqualsTest()
{
var OutputConfigItem = new OutputConfigItem() as IConfigItem;

var OutputConfigItem = CreateOutputConfigItem();
var ConfigItems = new List<IConfigItem>() {
OutputConfigItem
};

var OutputConfigItemOther = OutputConfigItem.Clone() as IConfigItem;
var ConfigItemsOther = new List<IConfigItem>() {
OutputConfigItemOther
};
CollectionAssert.AreEqual(ConfigItems, ConfigItemsOther);

// this test failed because of wrong Equals implementation
// Let's verify it works for OutputConfigItems
var foundConfig = ConfigItems.Find(x => x.GUID == OutputConfigItem.GUID);
Assert.IsNotNull(foundConfig);

Assert.AreEqual(OutputConfigItem.GUID, foundConfig.GUID);

Assert.IsTrue(ConfigItems.Remove(foundConfig));

Assert.AreEqual(OutputConfigItem, foundConfig);

// Let's verify it works for InputConfigItem, too
var InputConfigItem = new InputConfigItem() as IConfigItem;

ConfigItems.Add(InputConfigItem);

foundConfig = ConfigItems.Find(x => x.GUID == InputConfigItem.GUID);
Assert.IsNotNull(foundConfig);

Assert.AreEqual(InputConfigItem.GUID, foundConfig.GUID);

Assert.IsTrue(ConfigItems.Remove(foundConfig));

Assert.AreEqual(InputConfigItem, foundConfig);

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MobiFlight.OutputConfig;
using System;
using System.Text.RegularExpressions;

Expand Down
10 changes: 10 additions & 0 deletions MobiFlightUnitTests/MobiFlightUnitTests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
<Compile Include="Base\BooleanConverterConfigTests.cs" />
<Compile Include="Base\CmdLineParamsTests.cs" />
<Compile Include="Base\ComboBoxHelperTests.cs" />
<Compile Include="Base\ConfigFileFactoryTests.cs" />
<Compile Include="Base\ConfigFileTests.cs" />
<Compile Include="Base\ConfigItemTests.cs" />
<Compile Include="Base\ConfigRefListTests.cs" />
Expand Down Expand Up @@ -155,6 +156,15 @@
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<None Include="assets\Base\ConfigFile\Json\OpenConfig.mfjson">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="assets\Base\ConfigFile\OpenFileTest.LCD-serialization-bc.mcc.exp">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="assets\Base\ConfigFile\OpenFileTest.LCD-serialization-bc.mcc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="assets\Base\ConfigFile\Json\OpenProjectTest.mfproj">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
Expand Down
Loading

0 comments on commit 7148e7c

Please sign in to comment.