Author: spouliot
Date: 2008-02-15 14:29:38 -0500 (Fri, 15 Feb 2008)
New Revision: 95799

Removed:
   
trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/MethodSignatureTest.cs
   
trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/StackEntryAnalysisTest.cs
Modified:
   trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/ChangeLog
Log:
2008-02-15  Sebastien Pouliot  <[EMAIL PROTECTED]>

        * MethodSignature.cs
        * StackEntryAnalysis.cs:
                Moved into Gendarme.Framework.Helpers



Modified: trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/ChangeLog
===================================================================
--- trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/ChangeLog       
2008-02-15 19:29:00 UTC (rev 95798)
+++ trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/ChangeLog       
2008-02-15 19:29:38 UTC (rev 95799)
@@ -1,3 +1,9 @@
+2008-02-15  Sebastien Pouliot  <[EMAIL PROTECTED]>
+
+       * MethodSignature.cs
+       * StackEntryAnalysis.cs:
+               Moved into Gendarme.Framework.Helpers
+
 2008-01-30  Sebastien Pouliot  <[EMAIL PROTECTED]>
 
        * StackEntryAnalysisTest.cs: New. Unit tests from Andreas Noever.

Deleted: 
trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/MethodSignatureTest.cs
===================================================================
--- 
trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/MethodSignatureTest.cs
  2008-02-15 19:29:00 UTC (rev 95798)
+++ 
trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/MethodSignatureTest.cs
  2008-02-15 19:29:38 UTC (rev 95799)
@@ -1,116 +0,0 @@
-//
-// Unit tests for MethodSignature
-//
-// Authors:
-//     Andreas Noever <[EMAIL PROTECTED]>
-//     Sebastien Pouliot  <[EMAIL PROTECTED]>
-//
-//  (C) 2008 Andreas Noever
-// Copyright (C) 2008 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-using Mono.Cecil;
-using Gendarme.Framework;
-
-using NUnit.Framework;
-
-namespace Test.Framework {
-
-       [TestFixture]
-       public class MethodSignatureTest {
-
-               private TypeDefinition type;
-
-               [TestFixtureSetUp]
-               public void FixtureSetUp ()
-               {
-                       string unit = 
System.Reflection.Assembly.GetExecutingAssembly ().Location;
-                       type = AssemblyFactory.GetAssembly 
(unit).MainModule.Types ["Test.Framework.MethodSignatureTest"];
-               }
-
-               private MethodDefinition GetMethod (string name)
-               {
-                       foreach (MethodDefinition method in type.Methods)
-                               if (method.Name == name)
-                                       return method;
-                       return null;
-               }
-
-               [Test]
-               public void TestDefaultConstructor ()
-               {
-                       MethodSignature sig = new MethodSignature ();
-                       Assert.IsNull (sig.Name, "Name");
-                       Assert.IsNull (sig.Parameters, "Parameters");
-                       Assert.IsNull (sig.ReturnType, "ReturnType");
-                       Assert.AreEqual ((MethodAttributes) 0, sig.Attributes, 
"Attributes");
-                       Assert.AreEqual (String.Empty, sig.ToString (), 
"ToString");
-               }
-
-               [Test]
-               [ExpectedException (typeof (ArgumentNullException))]
-               public void MatchNull ()
-               {
-                       new MethodSignature ().Matches (null);
-               }
-
-               public void Method (bool parameter)
-               {
-               }
-
-               [Test]
-               public void TestMatch ()
-               {
-                       Assert.IsTrue (new MethodSignature ().Matches 
(GetMethod ("TestMatch")));
-
-                       Assert.IsTrue (new MethodSignature 
("TestMatch").Matches (GetMethod ("TestMatch")));
-                       Assert.IsFalse (new MethodSignature 
("TestMatch_").Matches (GetMethod ("TestMatch")));
-
-                       Assert.IsTrue (new MethodSignature (null, 
"System.Void").Matches (GetMethod ("TestMatch")));
-                       Assert.IsFalse (new MethodSignature (null, 
"System.Void_").Matches (GetMethod ("TestMatch")));
-
-                       Assert.IsFalse (new MethodSignature (null, null, new 
string [1]).Matches (GetMethod ("TestMatch")));
-                       Assert.IsTrue (new MethodSignature (null, null, new 
string [] { "System.Boolean" }).Matches (GetMethod ("Method")));
-                       Assert.IsTrue (new MethodSignature (null, null, new 
string [] { null }).Matches (GetMethod ("Method")));
-                       Assert.IsFalse (new MethodSignature (null, null, new 
string [] { "System.Object" }).Matches (GetMethod ("Method")));
-
-                       Assert.IsTrue (new MethodSignature (null, null, null, 
MethodAttributes.Public).Matches (GetMethod ("TestMatch")));
-                       Assert.IsFalse (new MethodSignature (null, null, null, 
MethodAttributes.Virtual).Matches (GetMethod ("TestMatch")));
-               }
-
-               [Test]
-               public void TestToString ()
-               {
-                       Assert.AreEqual (String.Empty, new MethodSignature 
().ToString (), "empty");
-                       Assert.AreEqual (String.Empty, new MethodSignature 
(null, "System.Void").ToString (), "return value");
-                       Assert.AreEqual (String.Empty, new MethodSignature 
(null, "System.Void", new string [] { "System.Object" }).ToString (), "return 
value + one param");
-
-                       Assert.AreEqual ("Equals()", new MethodSignature 
("Equals").ToString (), "name");
-                       Assert.AreEqual ("System.Boolean Equals()", new 
MethodSignature ("Equals", "System.Boolean").ToString (), "name + return 
value");
-                       Assert.AreEqual ("System.Boolean 
Equals(System.Object)", new MethodSignature ("Equals", "System.Boolean", new 
string[] { "System.Object" }).ToString (), "name + return value + one param");
-
-                       Assert.AreEqual ("System.Boolean Equals(A,B)", new 
MethodSignature ("Equals", "System.Boolean", new string [] { "A", "B" 
}).ToString (), "name + return value + two param");
-               }
-       }
-}

Deleted: 
trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/StackEntryAnalysisTest.cs
===================================================================
--- 
trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/StackEntryAnalysisTest.cs
       2008-02-15 19:29:00 UTC (rev 95798)
+++ 
trunk/mono-tools/gendarme/framework/Test/Gendarme.Framework/StackEntryAnalysisTest.cs
       2008-02-15 19:29:38 UTC (rev 95799)
@@ -1,707 +0,0 @@
-//
-// Unit tests for StackEntryAnalysis
-//
-// Authors:
-//     Andreas Noever <[EMAIL PROTECTED]>
-//
-//  (C) 2008 Andreas Noever
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Reflection;
-
-using Mono.Cecil;
-using Mono.Cecil.Cil;
-
-using Gendarme.Framework;
-
-using NUnit.Framework;
-
-namespace Test.Framework {
-
-       [TestFixture]
-       public class StackEntryAnalysisTest {
-
-               private AssemblyDefinition assembly;
-               private TypeDefinition type;
-
-               [TestFixtureSetUp]
-               public void FixtureSetUp ()
-               {
-                       string unit = Assembly.GetExecutingAssembly ().Location;
-                       assembly = AssemblyFactory.GetAssembly (unit);
-                       type = assembly.MainModule.Types 
["Test.Framework.StackEntryAnalysisTest"];
-               }
-
-               public MethodDefinition GetTest (string name)
-               {
-                       foreach (MethodDefinition method in type.Methods) {
-                               if (method.Name == name)
-                                       return method;
-                       }
-                       return null;
-               }
-
-               public Instruction GetFirstNewObj (MethodDefinition method)
-               {
-                       foreach (Instruction ins in method.Body.Instructions) {
-                               if (ins.OpCode.Code == Code.Newobj)
-                                       return ins;
-                       }
-                       return null;
-               }
-
-               public object SimpleReturn ()
-               {
-                       return new object ();
-               }
-
-               [Test]
-               public void TestSimpleReturn ()
-               {
-                       MethodDefinition m = GetTest ("SimpleReturn");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Ret, result 
[0].Instruction.OpCode);
-               }
-
-               public object SimpleLoc ()
-               {
-                       object a = new object ();
-                       return a;
-               }
-
-               [Test]
-               public void TestSimpleLoc ()
-               {
-                       MethodDefinition m = GetTest ("SimpleLoc");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Ret, result 
[0].Instruction.OpCode);
-               }
-
-               public object Loc ()
-               {
-                       object a = new object ();
-                       object b = a;
-                       return b;
-               }
-
-               [Test]
-               public void TestLoc ()
-               {
-                       MethodDefinition m = GetTest ("Loc");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Ret, result 
[0].Instruction.OpCode);
-               }
-
-               public object Loc2 ()
-               {
-                       int a = 0;
-                       int b = 1;
-                       int c = 2;
-                       int d = 3;
-                       object e = new object ();
-                       switch (new Random ().Next ()) {
-                       case 0:
-                               return a;
-                       case 1:
-                               return b;
-                       case 2:
-                               return c;
-                       case 3:
-                               return d;
-                       default:
-                               return e;
-                       }
-               }
-
-               [Test]
-               public void TestLoc2 ()
-               {
-                       MethodDefinition m = GetTest ("Loc2");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Ret, result 
[0].Instruction.OpCode);
-               }
-
-               public object Pop ()
-               {
-                       new object ();
-                       return null;
-               }
-
-               [Test]
-               public void TestPop ()
-               {
-                       MethodDefinition m = GetTest ("Pop");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (0, result.Length);
-               }
-
-               public object Branch ()
-               {
-                       object a = new object ();
-                       object b;
-                       if (new Random ().Next () == 0)
-                               return a;
-                       else
-                               b = a;
-                       return b.ToString ();
-               }
-
-               [Test]
-               public void TestBranch ()
-               {
-                       MethodDefinition m = GetTest ("Branch");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (2, result.Length);
-                       Assert.AreEqual (OpCodes.Ret, result 
[0].Instruction.OpCode);
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[1].Instruction.OpCode);
-               }
-
-               public void Branch2 ()
-               {
-                       Exception a = new Exception ();
-                       bool cond = new Random ().Next () == 0;
-                       a.Source = cond ? "a" : "b"; //tricks the compiler to 
load a onto the stack before doing a branch (to get more coverage)
-               }
-
-               [Test]
-               public void TestBranch2 ()
-               {
-                       MethodDefinition m = GetTest ("Branch2");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[0].Instruction.OpCode);
-               }
-
-               public object TryFinally ()
-               {
-                       object a = new object ();
-                       object b = null;
-                       object c;
-                       try {
-                               b = a;
-                       }
-                       finally {
-                               c = b;
-                               b = null;
-                       }
-                       if (new Random ().Next () == 0)
-                               return c.ToString ();
-                       else
-                               return b;
-               }
-
-               [Test]
-               public void TestTryFinally ()
-               {
-                       MethodDefinition m = GetTest ("TryFinally");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[0].Instruction.OpCode);
-               }
-
-               public object NestedTryFinally ()
-               {
-                       object a = new object ();
-                       object b = null;
-                       object c = null;
-                       try {
-                               b = a;
-                               try {
-                                       c = new object ();
-                               }
-                               finally {
-                                       c = a;
-                                       a = null;
-                               }
-                       }
-                       finally {
-                               b = null;
-                       }
-                       if (new Random ().Next () == 0)
-                               return a;
-                       else if (new Random ().Next () == 0)
-                               return b;
-                       else
-                               return c.ToString ();
-               }
-
-               [Test]
-               public void TestNestedTryFinally ()
-               {
-                       MethodDefinition m = GetTest ("NestedTryFinally");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[0].Instruction.OpCode);
-               }
-
-               public object NestedTryFinally2 ()
-               {
-                       object a = new object ();
-                       object b = null;
-                       object c = null;
-                       try {
-                               b = a;
-                       }
-                       finally {
-                               try {
-                                       c = new object ();
-                               }
-                               finally {
-                                       c = a;
-                                       a = null;
-                               }
-                               b = null;
-                       }
-                       if (new Random ().Next () == 0)
-                               return a;
-                       else if (new Random ().Next () == 0)
-                               return b;
-                       else
-                               return c.ToString ();
-               }
-
-               [Test]
-               public void TestNestedTryFinally2 ()
-               {
-                       MethodDefinition m = GetTest ("NestedTryFinally2");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[0].Instruction.OpCode);
-               }
-
-               public object TryCatch ()
-               {
-                       object a = new object ();
-                       object b = null;
-                       object c = null;
-                       try {
-                               if (new Random ().Next () == 0) {
-                                       a = null;
-                                       return a;
-                               }
-                       }
-                       catch {
-                               b = a;
-                               if (new Random ().Next () == 0)
-                                       return a.ToString ();
-                       }
-                       return b.GetHashCode ();
-               }
-
-               [Test]
-               public void TestTryCatch ()
-               {
-                       MethodDefinition m = GetTest ("TryCatch");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (2, result.Length); //no "return a";
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[0].Instruction.OpCode); //return a.ToString ();
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[1].Instruction.OpCode); //return b.GetHashCode ();
-               }
-
-               public object TryCatchFinally ()
-               {
-                       object a = new object ();
-                       object b = null;
-                       object c = null;
-                       try {
-                               if (new Random ().Next () == 0) {
-                                       a = null;
-                                       return a;
-                               }
-                       }
-                       catch {
-                               b = a;
-                               if (new Random ().Next () == 0)
-                                       return a.ToString ();
-                               try {
-                                       a = null;
-                               }
-                               finally {
-                                       c = b;
-                                       b = a;
-                               }
-                       }
-                       finally {
-                       }
-                       if (new Random ().Next () == 0)
-                               return b;
-                       else
-                               return c.GetHashCode ();
-               }
-
-               [Test]
-               public void TestTryCatchFinally ()
-               {
-                       MethodDefinition m = GetTest ("TryCatchFinally");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (2, result.Length); //no "return a";
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[0].Instruction.OpCode); //return a.ToString ();
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[1].Instruction.OpCode); //return c.GetHashCode ();
-               }
-
-               public object MultipleCatch ()
-               {
-                       object a = new object ();
-                       object b = null;
-                       object c = null;
-                       try {
-                               if (new Random ().Next () == 0) {
-                                       a = null;
-                                       return a;
-                               }
-                       }
-                       catch (InvalidOperationException) {
-                               b = a;
-                       }
-                       catch (InvalidCastException) {
-                               c = a;
-                       }
-                       finally {
-                               a = null;
-                       }
-                       if (new Random ().Next () == 0)
-                               return a;
-                       else if (new Random ().Next () == 0)
-                               return b.GetHashCode ();
-                       else
-                               return c.ToString ();
-               }
-
-               [Test]
-               public void TestMultipleCatch ()
-               {
-                       MethodDefinition m = GetTest ("MultipleCatch");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (2, result.Length); //no "return a";
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[0].Instruction.OpCode); //return b.ToString ();
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[1].Instruction.OpCode); //return c.GetHashCode ();
-               }
-
-               public object Starg (object b)
-               {
-                       object a = new object ();
-                       b = a;
-                       return b;
-               }
-
-               [Test]
-               public void TestStarg ()
-               {
-                       MethodDefinition m = GetTest ("Starg");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Ret, result 
[0].Instruction.OpCode);
-               }
-
-               public object Starg2 (object a, object b, object c, object d) 
//force ldarg.s (no macro)
-               {
-                       d = new object ();
-                       return d;
-               }
-
-               [Test]
-               public void TestStarg2 ()
-               {
-                       MethodDefinition m = GetTest ("Starg2");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Ret, result 
[0].Instruction.OpCode);
-               }
-
-               public static object StargStatic (object a, object b, object c, 
object d, object e) //force ldarg.s (no macro) (static (no this))
-               {
-                       e = new object ();
-                       return e;
-               }
-
-               [Test]
-               public void TestStargStatic ()
-               {
-                       MethodDefinition m = GetTest ("StargStatic");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Ret, result 
[0].Instruction.OpCode);
-               }
-
-               public object OutArg (out object b)
-               {
-                       object a = new object ();
-                       b = a;
-                       return b; //this is not guaranteed to work in complex 
situations. The lookup for stind_ref simply checks all previous instructions 
for ldargs.
-               }
-
-               [Test]
-               public void TestOutArg ()
-               {
-                       MethodDefinition m = GetTest ("OutArg");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (2, result.Length);
-                       Assert.AreEqual (OpCodes.Stind_Ref, result 
[0].Instruction.OpCode);
-                       Assert.AreEqual (OpCodes.Ret, result 
[1].Instruction.OpCode);
-               }
-
-               public object OutArg2 (object a, object b, object c, out object 
d) //force non macro version
-               {
-                       d = new object ();
-                       return d;
-               }
-
-               [Test]
-               public void TestOutArg2 ()
-               {
-                       MethodDefinition m = GetTest ("OutArg2");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (2, result.Length);
-                       Assert.AreEqual (OpCodes.Stind_Ref, result 
[0].Instruction.OpCode);
-                       Assert.AreEqual (OpCodes.Ret, result 
[1].Instruction.OpCode);
-               }
-
-               public object Switch ()
-               {
-                       object a = new object ();
-                       object b = null;
-
-                       switch (new Random ().Next ()) {
-                       case 0:
-                               return a.ToString ();
-                       case 1:
-                               b = a;
-                               goto case 3;
-                       case 2:
-                               a = null;
-                               return a;
-                       case 3:
-                               return b.ToString ();
-
-                       }
-                       return null;
-               }
-
-               [Test]
-               public void TestSwitch ()
-               {
-                       MethodDefinition m = GetTest ("Switch");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (2, result.Length);
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[0].Instruction.OpCode);
-                       Assert.AreEqual (OpCodes.Callvirt, result 
[1].Instruction.OpCode);
-               }
-
-               [Test]
-               public void TestSwitch2 ()
-               {
-                       //I could not find c# code that loads a reference onto 
the stack before executing switch
-                       //newobj System.Object.ctor <- reference is on the stack
-                       //ldc.i4.0
-                       //switch +2,+3
-                       //ret <- default
-                       //ret <- switch1
-                       //ret <- switch2
-
-                       MethodDefinition m = new MethodDefinition ("Switch2", 
Mono.Cecil.MethodAttributes.Public, this.type);
-
-                       Instruction switch1 = m.Body.CilWorker.Create 
(OpCodes.Ret);
-                       Instruction switch2 = m.Body.CilWorker.Create 
(OpCodes.Ret);
-
-                       m.Body.CilWorker.Emit (OpCodes.Newobj, 
(MethodReference) GetFirstNewObj (GetTest ("Switch")).Operand); //get 
object.ctor()
-                       m.Body.CilWorker.Emit (OpCodes.Ldc_I4_0);
-                       m.Body.CilWorker.Emit (OpCodes.Switch, new Instruction 
[] { switch1, switch2 });
-
-                       //default       
-                       m.Body.CilWorker.Emit (OpCodes.Ret);
-
-                       //switch 1 and 2
-                       m.Body.CilWorker.Append (switch1);
-                       m.Body.CilWorker.Append (switch2);
-
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (3, result.Length);
-                       Assert.AreEqual (OpCodes.Ret, result 
[0].Instruction.OpCode);
-                       Assert.AreEqual (OpCodes.Ret, result 
[1].Instruction.OpCode);
-                       Assert.AreEqual (OpCodes.Ret, result 
[2].Instruction.OpCode);
-               }
-
-               public void Castclass ()
-               {
-                       Exception a = (Exception) new object ();
-                       throw a;
-               }
-
-               [Test]
-               public void TestCastclass ()
-               {
-                       MethodDefinition m = GetTest ("Castclass");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Throw, result 
[0].Instruction.OpCode);
-               }
-
-               public void StackOffset ()
-               {
-                       string a = (string) new object ();
-                       a.ToString ();
-                       a.CompareTo (a);
-                       Console.WriteLine (a);
-               }
-
-               [Test]
-               public void TestStackOffset ()
-               {
-                       MethodDefinition m = GetTest ("StackOffset");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (4, result.Length);
-                       Assert.AreEqual (0, result [0].StackOffset);
-                       Assert.AreEqual (1, result [1].StackOffset);
-                       Assert.AreEqual (0, result [2].StackOffset);
-                       Assert.AreEqual (0, result [3].StackOffset);
-               }
-
-               object field;
-               public void Field ()
-               {
-                       field = new object ();
-                       field.ToString ();
-               }
-
-               [Test]
-               public void TestField ()
-               {
-                       MethodDefinition m = GetTest ("Field");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (2, result.Length);
-                       Assert.AreEqual (Code.Stfld, result 
[0].Instruction.OpCode.Code);
-                       Assert.AreEqual (Code.Callvirt, result 
[1].Instruction.OpCode.Code);
-               }
-
-               public void Field2 ()
-               {
-                       var t = new StackEntryAnalysisTest ();
-                       t.field = new object (); //do not follow assigns to 
other objects!
-                       field.ToString ();
-                       t.field.ToString ();
-               }
-
-               [Test]
-               [Ignore ("StackEntryAnalysis does currently not check wich 
instance the field belongs to. This will need a reverse StackEntry test and 
AssemblyResolver support (for protected fields and/or static fields).")]
-               public void TestField2 ()
-               {
-                       MethodDefinition m = GetTest ("Field2");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (Code.Stfld, result 
[0].Instruction.OpCode.Code);
-               }
-
-               static object staticField;
-               public void StaticField ()
-               {
-                       staticField = new object ();
-                       staticField.ToString ();
-               }
-
-               [Test]
-               public void TestStaticField ()
-               {
-                       MethodDefinition m = GetTest ("StaticField");
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (GetFirstNewObj (m));
-
-                       Assert.AreEqual (2, result.Length);
-                       Assert.AreEqual (Code.Stsfld, result 
[0].Instruction.OpCode.Code);
-                       Assert.AreEqual (Code.Callvirt, result 
[1].Instruction.OpCode.Code);
-               }
-
-/*     Cecil doesn't support Calli instructions atm.
-               [Test] 
-               public void TestCalli ()
-               {
-                       //ldftn Calli
-                       //calli void ()
-                       //ret
-
-                       MethodDefinition m = new MethodDefinition ("Calli", 
Mono.Cecil.MethodAttributes.Public, this.type);
-
-                       m.Body.CilWorker.Emit (OpCodes.Ldftn, m);
-               
-                       m.Body.CilWorker.Create (OpCodes.Calli, new CallSite 
(false, false, MethodCallingConvention.Default, GetTest 
("TestCalli").ReturnType));
-                       m.Body.CilWorker.Emit (OpCodes.Ret);
-
-                       StackEntryAnalysis sea = new StackEntryAnalysis (m);
-                       StackEntryAnalysis.UsageResult [] result = 
sea.GetStackEntryUsage (m.Body.Instructions[0]);
-
-                       Assert.AreEqual (1, result.Length);
-                       Assert.AreEqual (OpCodes.Calli, result 
[0].Instruction.OpCode);
-               }*/
-       }
-}

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to