Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Consolidate and fix up tests
  • Loading branch information
anthonylangsworth committed Mar 4, 2017
commit 8f8cb744c5a263cd4ed29ab7f0e0a28e689f5954
129 changes: 40 additions & 89 deletions src/System.Security.Cryptography.Xml/tests/XmlDsigC14NTransformTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,6 @@ namespace System.Security.Cryptography.Xml.Tests
// difficult to test properly. This class "open it up" :-)
public class UnprotectedXmlDsigC14NTransform : XmlDsigC14NTransform
{
public UnprotectedXmlDsigC14NTransform()
{
}

public UnprotectedXmlDsigC14NTransform(bool includeComments)
: base(includeComments)
{
}

public XmlNodeList UnprotectedGetInnerXml()
{
return base.GetInnerXml();
Expand All @@ -42,69 +33,35 @@ public XmlNodeList UnprotectedGetInnerXml()

public class XmlDsigC14NTransformTest
{

protected UnprotectedXmlDsigC14NTransform transform;

public XmlDsigC14NTransformTest()
{
transform = new UnprotectedXmlDsigC14NTransform();
}

[Fact] // ctor ()
public void Constructor1()
[Fact]
public void Constructor_Empty()
{
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
Assert.Equal("http://www.w3.org/TR/2001/REC-xml-c14n-20010315", transform.Algorithm);
CheckProperties(transform);
}

[Fact] // ctor (Boolean)
public void Constructor2()
[Theory]
[InlineData(true, "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments")]
[InlineData(false, "http://www.w3.org/TR/2001/REC-xml-c14n-20010315")]
public void Constructor_Bool(bool includeComments, string expectedAlgorithm)
{
transform = new UnprotectedXmlDsigC14NTransform(true);
Assert.Equal("http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments", transform.Algorithm);
CheckProperties(transform);

transform = new UnprotectedXmlDsigC14NTransform(false);
Assert.Equal("http://www.w3.org/TR/2001/REC-xml-c14n-20010315", transform.Algorithm);
XmlDsigC14NTransform transform = new XmlDsigC14NTransform(includeComments);
Assert.Equal(expectedAlgorithm, transform.Algorithm);
CheckProperties(transform);
}

void CheckProperties(XmlDsigC14NTransform transform)
public void CheckProperties(XmlDsigC14NTransform transform)
{
Type[] input = transform.InputTypes;
Assert.True((input.Length == 3), "Input #");
// check presence of every supported input types
bool istream = false;
bool ixmldoc = false;
bool ixmlnl = false;
foreach (Type t in input)
{
if (t.ToString() == "System.IO.Stream")
istream = true;
if (t.ToString() == "System.Xml.XmlDocument")
ixmldoc = true;
if (t.ToString() == "System.Xml.XmlNodeList")
ixmlnl = true;
}
Assert.True(istream, "Input Stream");
Assert.True(ixmldoc, "Input XmlDocument");
Assert.True(ixmlnl, "Input XmlNodeList");

Type[] output = transform.OutputTypes;
Assert.True((output.Length == 1), "Output #");
// check presence of every supported output types
bool ostream = false;
foreach (Type t in output)
{
if (t.ToString() == "System.IO.Stream")
ostream = true;
}
Assert.True(ostream, "Output Stream");
Assert.Null(transform.Context);
Assert.Equal(new[] { typeof(Stream), typeof(XmlDocument), typeof(XmlNodeList) }, transform.InputTypes);
Assert.Equal(new[] { typeof(Stream) }, transform.OutputTypes);
}

[Fact]
public void GetInnerXml()
{
UnprotectedXmlDsigC14NTransform transform = new UnprotectedXmlDsigC14NTransform();
XmlNodeList xnl = transform.UnprotectedGetInnerXml();
Assert.Null(xnl);
}
Expand All @@ -128,42 +85,46 @@ private XmlDocument GetDoc()
[Fact]
public void LoadInputAsXmlDocument()
{
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
XmlDocument doc = GetDoc();
transform.LoadInput(doc);
Stream s = (Stream)transform.GetOutput();
string output = TestHelpers.StreamToString(s, Encoding.UTF8);
Assert.Equal(c14xml3, output);
}

[Fact(Skip = "TODO: fix me")]
[Fact()]
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Fact()

// see LoadInputAsXmlNodeList2 description
public void LoadInputAsXmlNodeList()
{
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
XmlDocument doc = GetDoc();
// Argument list just contains element Test.
transform.LoadInput(doc.ChildNodes);
Stream s = (Stream)transform.GetOutput();
string output = TestHelpers.StreamToString(s, Encoding.UTF8);
Assert.Equal("<Test></Test>", output);
Assert.Equal(@"<Test xmlns=""http://www.go-mono.com/""></Test>", output);
}

[Fact(Skip = "TODO: fix me")]
[Fact()]
// MS has a bug that those namespace declaration nodes in
// the node-set are written to output. Related spec section is:
// http://www.w3.org/TR/2001/REC-xml-c14n-20010315#ProcessingModel
public void LoadInputAsXmlNodeList2()
{
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
XmlDocument doc = GetDoc();
transform.LoadInput(doc.SelectNodes("//*"));
Stream s = (Stream)transform.GetOutput();
string output = TestHelpers.StreamToString(s, Encoding.UTF8);
string expected = @"<Test><Toto></Toto></Test>";
string expected = @"<Test xmlns=""http://www.go-mono.com/""><Toto></Toto></Test>";
Assert.Equal(expected, output);
}

[Fact]
public void LoadInputAsStream()
{
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
MemoryStream ms = new MemoryStream();
byte[] x = Encoding.ASCII.GetBytes(xml);
ms.Write(x, 0, x.Length);
Expand All @@ -177,13 +138,15 @@ public void LoadInputAsStream()
[Fact]
public void LoadInputWithUnsupportedType()
{
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
byte[] bad = { 0xBA, 0xD };
Assert.Throws<ArgumentException>(() => transform.LoadInput(bad));
}

[Fact]
public void UnsupportedOutput()
{
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
XmlDocument doc = new XmlDocument();
Assert.Throws<ArgumentException>(() => transform.GetOutput(doc.GetType()));
}
Expand All @@ -197,33 +160,19 @@ public void C14NSpecExample1()
Assert.Equal(C14NSpecExample1Output, res);
}

[Fact]
public void C14NSpecExample2()
{
string res = ExecuteXmlDSigC14NTransform(C14NSpecExample2Input);
Assert.Equal(C14NSpecExample2Output, res);
}

[Fact]
public void C14NSpecExample3()
{
string res = ExecuteXmlDSigC14NTransform(C14NSpecExample3Input);
Assert.Equal(C14NSpecExample3Output, res);
}

[Fact]
public void C14NSpecExample4()
[Theory]
[InlineData(C14NSpecExample2Input, C14NSpecExample2Output)]
[InlineData(C14NSpecExample3Input, C14NSpecExample3Output)]
[InlineData(C14NSpecExample4Input, C14NSpecExample4Output)]
public void C14NSpecExample(string input, string expectedOutput)
{
string res = ExecuteXmlDSigC14NTransform(C14NSpecExample4Input);
Assert.Equal(C14NSpecExample4Output, res);
string result = ExecuteXmlDSigC14NTransform(input);
Assert.Equal(expectedOutput, result);
}

[Fact]
public void C14NSpecExample5()
{
//string testName = GetType().Name + "." + nameof(C14NSpecExample5);
//using (TestHelpers.CreateTestTextFile(testName, "world"))
//{
XmlPreloadedResolver resolver = new XmlPreloadedResolver();
resolver.Add(new Uri("file://doc.txt"), "world");
string res = ExecuteXmlDSigC14NTransform(C14NSpecExample5Input, resolver);
Expand All @@ -233,12 +182,13 @@ public void C14NSpecExample5()
[Fact]
public void C14NSpecExample6()
{
string res = ExecuteXmlDSigC14NTransform(C14NSpecExample6Input);
string res = TestHelpers.ExecuteTransform(C14NSpecExample6Input, new XmlDsigC14NTransform(), Encoding.GetEncoding("ISO-8859-1"));
Assert.Equal(C14NSpecExample6Output, res);
}

private string ExecuteXmlDSigC14NTransform(string InputXml, XmlResolver resolver = null)
{
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.XmlResolver = resolver;
Expand Down Expand Up @@ -288,7 +238,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml, XmlResolver resolver
// Example 2 from C14N spec - Whitespace in Document Content:
// http://www.w3.org/TR/xml-c14n#Example-WhitespaceInContent
//
static string C14NSpecExample2Input =
const string C14NSpecExample2Input =
"<doc>\n" +
" <clean> </clean>\n" +
" <dirty> A B </dirty>\n" +
Expand All @@ -300,7 +250,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml, XmlResolver resolver
" C\n" +
" </mixed>\n" +
"</doc>\n";
static string C14NSpecExample2Output =
const string C14NSpecExample2Output =
"<doc>\n" +
" <clean> </clean>\n" +
" <dirty> A B </dirty>\n" +
Expand All @@ -317,7 +267,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml, XmlResolver resolver
// Example 3 from C14N spec - Start and End Tags:
// http://www.w3.org/TR/xml-c14n#Example-SETags
//
static string C14NSpecExample3Input =
const string C14NSpecExample3Input =
"<!DOCTYPE doc [<!ATTLIST e9 attr CDATA \"default\">]>\n" +
"<doc>\n" +
" <e1 />\n" +
Expand All @@ -336,7 +286,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml, XmlResolver resolver
" </e7>\n" +
" </e6>\n" +
"</doc>\n";
static string C14NSpecExample3Output =
const string C14NSpecExample3Output =
"<doc>\n" +
" <e1></e1>\n" +
" <e2></e2>\n" +
Expand Down Expand Up @@ -364,7 +314,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml, XmlResolver resolver
// should be normalized by XML parser. Currently Mono
// does not support this (see comment after this example
// in the spec).
static string C14NSpecExample4Input =
const string C14NSpecExample4Input =
"<!DOCTYPE doc [<!ATTLIST normId id ID #IMPLIED>]>\n" +
"<doc>\n" +
" <text>First line&#x0d;&#10;Second line</text>\n" +
Expand All @@ -374,7 +324,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml, XmlResolver resolver
" <norm attr=\' &apos; &#x20;&#13;&#xa;&#9; &apos; \'/>\n" +
// " <normId id=\' &apos; &#x20;&#13;&#xa;&#9; &apos; \'/>\n" +
"</doc>\n";
static string C14NSpecExample4Output =
const string C14NSpecExample4Output =
"<doc>\n" +
" <text>First line&#xD;\n" +
"Second line</text>\n" +
Expand Down Expand Up @@ -435,6 +385,7 @@ public void SimpleNamespacePrefixes()
[Fact]
public void OrdinalSortForAttributes()
{
XmlDsigC14NTransform transform = new XmlDsigC14NTransform();
XmlDocument doc = new XmlDocument();
string xml = "<foo Aa=\"one\" Bb=\"two\" aa=\"three\" bb=\"four\"><bar></bar></foo>";
doc.LoadXml(xml);
Expand Down