// // XmlDsigXsltTransformTest.cs - NUnit Test Cases for XmlDsigXsltTransform // // Author: // Sebastien Pouliot (spouliot@motus.com) // // (C) 2002 Motus Technologies Inc. (http://www.motus.com) // using NUnit.Framework; using System; using System.IO; using System.Security.Cryptography; using System.Security.Cryptography.Xml; using System.Text; using System.Xml; namespace MonoTests.System.Security.Cryptography.Xml { public class XmlDsigXsltTransformTest : TestCase { public XmlDsigXsltTransformTest () : base ("System.Security.Cryptography.Xml.XmlDsigXsltTransform testsuite") {} public XmlDsigXsltTransformTest (string name) : base (name) {} protected XmlDsigXsltTransform transform; protected override void SetUp () { transform = new XmlDsigXsltTransform (); } protected override void TearDown () {} public static ITest Suite { get { return new TestSuite (typeof (XmlDsigXsltTransformTest)); } } public void TestProperties () { AssertEquals ("Algorithm", "http://www.w3.org/TR/1999/REC-xslt-19991116", transform.Algorithm); Type[] input = transform.InputTypes; Assert ("Input #", (input.Length == 3)); // 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 ("Input Stream", istream); Assert ("Input XmlDocument", ixmldoc); Assert ("Input XmlNodeList", ixmlnl); Type[] output = transform.OutputTypes; Assert ("Output #", (output.Length == 1)); // check presence of every supported output types bool ostream = false; foreach (Type t in input) { if (t.ToString () == "System.IO.Stream") ostream = true; } Assert ("Output Stream", ostream); } private string Stream2Array (Stream s) { StringBuilder sb = new StringBuilder (); int b = s.ReadByte (); while (b != -1) { sb.Append (b.ToString("X2")); b = s.ReadByte (); } return sb.ToString (); } public void Test () { string test = "XmlDsigXsltTransform"; XmlDocument doc = new XmlDocument (); doc.LoadXml (test); transform.LoadInnerXml (doc.ChildNodes); Stream s = (Stream) transform.GetOutput (); string output = Stream2Array (s); // load as XmlDocument transform.LoadInput (doc); s = (Stream) transform.GetOutput (); output = Stream2Array (s); // load as XmlNodeList transform.LoadInput (doc.ChildNodes); s = (Stream) transform.GetOutput (); output = Stream2Array (s); // load as Stream MemoryStream ms = new MemoryStream (); doc.Save (ms); ms.Position = 0; transform.LoadInput (ms); s = (Stream) transform.GetOutput (); output = Stream2Array (s); } protected void AssertEquals (string msg, XmlNodeList expected, XmlNodeList actual) { for (int i=0; i < expected.Count; i++) { if (expected[i].OuterXml != actual[i].OuterXml) { Fail (msg + " [" + i + "] expected " + expected[i].OuterXml + " bug got " + actual[i].OuterXml); } } } public void TestLoadInnerXml () { string value = ""; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); transform.LoadInnerXml (doc.ChildNodes); // note: GetInnerXml is protected so we can't AssertEquals :-( // unless we use reflection (making ti a lot more complicated) } public void TestUnsupportedInput () { byte[] bad = { 0xBA, 0xD }; // LAMESPEC: input MUST be one of InputType - but no exception is thrown (not documented) transform.LoadInput (bad); } public void TestUnsupportedOutput () { try { XmlDocument doc = new XmlDocument(); object o = transform.GetOutput (doc.GetType ()); Fail ("Expected ArgumentException but got none"); } catch (ArgumentException) { // this is what we expected } catch (Exception e) { Fail ("Expected ArgumentException but got: " + e.ToString ()); } } } }