SEBWIN-296: Extended unit tests for XML parser.

This commit is contained in:
dbuechel 2019-02-20 13:02:12 +01:00
parent ef298836f1
commit f2b3e8e32b
3 changed files with 70 additions and 2 deletions

View file

@ -41,6 +41,7 @@ namespace SafeExamBrowser.Configuration.UnitTests.DataFormats
Assert.IsFalse(sut.CanParse(null));
Assert.IsFalse(sut.CanParse(new MemoryStream(Encoding.UTF8.GetBytes("<key>someKey</key><value>1</value>"))));
Assert.IsFalse(sut.CanParse(new MemoryStream(Encoding.UTF8.GetBytes("<html></html>"))));
Assert.IsFalse(sut.CanParse(new MemoryStream(Encoding.UTF8.GetBytes("<?x"))));
Assert.IsTrue(sut.CanParse(new MemoryStream(Encoding.UTF8.GetBytes("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"))));
}
@ -59,6 +60,7 @@ namespace SafeExamBrowser.Configuration.UnitTests.DataFormats
Assert.AreEqual(9876, result.RawData["someInteger"]);
Assert.IsTrue(Convert.FromBase64String("/5vlF76sb+5vgkhjiNTOn7l1SN3Ho2UAMJD3TtLo49M=").SequenceEqual(result.RawData["someData"] as IEnumerable<byte>));
Assert.AreEqual(true, result.RawData["someBoolean"]);
Assert.AreEqual(false, result.RawData["anotherBoolean"]);
Assert.AreEqual(12.34, result.RawData["someReal"]);
Assert.AreEqual(new DateTime(2019, 02, 20, 12, 30, 00, 123), result.RawData["someDate"]);
@ -78,6 +80,71 @@ namespace SafeExamBrowser.Configuration.UnitTests.DataFormats
Assert.AreEqual(4, (dictThree["dictThreeKeyTwo"] as List<object>)[3]);
}
[TestMethod]
public void MustCheckForRootDictionary()
{
var xml = "<?xml version=\"1.0\"?><plist></plist>";
var xml2 = "<?xml version=\"1.0\"?><plist><key>someKey</key><integer>5</integer></plist>";
var xml3 = "<?xml version=\"1.0\"?><plist><dictionary></dictionary></plist>";
var result = sut.TryParse(new MemoryStream(Encoding.UTF8.GetBytes(xml)));
Assert.AreEqual(LoadStatus.InvalidData, result.Status);
result = sut.TryParse(new MemoryStream(Encoding.UTF8.GetBytes(xml2)));
Assert.AreEqual(LoadStatus.InvalidData, result.Status);
result = sut.TryParse(new MemoryStream(Encoding.UTF8.GetBytes(xml3)));
Assert.AreEqual(LoadStatus.InvalidData, result.Status);
}
[TestMethod]
public void MustParseEmptyXml()
{
var xml = "<?xml version=\"1.0\"?><plist><dict></dict></plist>";
var result = sut.TryParse(new MemoryStream(Encoding.UTF8.GetBytes(xml)));
Assert.AreEqual(LoadStatus.Success, result.Status);
Assert.AreEqual(0, result.RawData.Count);
}
[TestMethod]
public void MustDetectInvalidKey()
{
var xml = "<?xml version=\"1.0\"?><plist><dict><nokey>blubb</nokey><true /></dict></plist>";
var result = sut.TryParse(new MemoryStream(Encoding.UTF8.GetBytes(xml)));
Assert.AreEqual(LoadStatus.InvalidData, result.Status);
}
[TestMethod]
public void MustDetectInvalidValueType()
{
var xml = "<?xml version=\"1.0\"?><plist><dict><key>blubb</key><globb>1234</globb></dict></plist>";
var result = sut.TryParse(new MemoryStream(Encoding.UTF8.GetBytes(xml)));
Assert.AreEqual(LoadStatus.InvalidData, result.Status);
}
[TestMethod]
public void MustAllowEmptyArray()
{
var xml = "<?xml version=\"1.0\"?><plist><dict><key>value</key><array /></dict></plist>";
var result = sut.TryParse(new MemoryStream(Encoding.UTF8.GetBytes(xml)));
Assert.AreEqual(LoadStatus.Success, result.Status);
Assert.IsInstanceOfType(result.RawData["value"], typeof(IList<object>));
}
[TestMethod]
public void MustAllowEmptyDictionary()
{
var xml = "<?xml version=\"1.0\"?><plist><dict><key>value</key><dict /></dict></plist>";
var result = sut.TryParse(new MemoryStream(Encoding.UTF8.GetBytes(xml)));
Assert.AreEqual(LoadStatus.Success, result.Status);
Assert.IsInstanceOfType(result.RawData["value"], typeof(IDictionary<string, object>));
}
private Stream LoadTestData()
{
var path = $"{nameof(SafeExamBrowser)}.{nameof(Configuration)}.{nameof(UnitTests)}.{nameof(DataFormats)}.XmlTestData.xml";

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<plist>
<dict>
<key>someString</key>
@ -35,6 +35,8 @@
</array>
<key>someBoolean</key>
<true />
<key>anotherBoolean</key>
<false />
<key>someReal</key>
<real>12.34</real>
<key>someDate</key>

View file

@ -176,7 +176,6 @@ namespace SafeExamBrowser.Configuration.DataFormats
return LoadStatus.InvalidData;
}
reader.Read();
reader.MoveToContent();
var status = ParseElement(reader, out object value);