/Test/Mono.Cecil.Tests/ParameterTests.cs
http://github.com/jbevain/cecil · C# · 274 lines · 206 code · 68 blank · 0 comment · 0 complexity · d9ac529508cb7ae6888e949b880282fc MD5 · raw file
- using System;
- using NUnit.Framework;
- namespace Mono.Cecil.Tests {
- [TestFixture]
- public class ParameterTests : BaseTestFixture {
- [Test]
- public void MarshalAsI4 ()
- {
- TestModule ("marshal.dll", module => {
- var bar = module.GetType ("Bar");
- var pan = bar.GetMethod ("Pan");
- Assert.AreEqual (1, pan.Parameters.Count);
- var parameter = pan.Parameters [0];
- Assert.IsTrue (parameter.HasMarshalInfo);
- var info = parameter.MarshalInfo;
- Assert.AreEqual (typeof (MarshalInfo), info.GetType ());
- Assert.AreEqual (NativeType.I4, info.NativeType);
- });
- }
- [Test]
- public void CustomMarshaler ()
- {
- TestModule ("marshal.dll", module => {
- var bar = module.GetType ("Bar");
- var pan = bar.GetMethod ("PanPan");
- var parameter = pan.Parameters [0];
- Assert.IsTrue (parameter.HasMarshalInfo);
- var info = (CustomMarshalInfo) parameter.MarshalInfo;
- Assert.AreEqual (Guid.Empty, info.Guid);
- Assert.AreEqual (string.Empty, info.UnmanagedType);
- Assert.AreEqual (NativeType.CustomMarshaler, info.NativeType);
- Assert.AreEqual ("nomnom", info.Cookie);
- Assert.AreEqual ("Boc", info.ManagedType.FullName);
- Assert.AreEqual (module, info.ManagedType.Scope);
- });
- }
- [Test]
- public void SafeArrayMarshaler ()
- {
- TestModule ("marshal.dll", module => {
- var bar = module.GetType ("Bar");
- var pan = bar.GetMethod ("PanPan");
- Assert.IsTrue (pan.MethodReturnType.HasMarshalInfo);
- var info = (SafeArrayMarshalInfo) pan.MethodReturnType.MarshalInfo;
- Assert.AreEqual (VariantType.Dispatch, info.ElementType);
- });
- }
- [Test]
- public void ArrayMarshaler ()
- {
- TestModule ("marshal.dll", module => {
- var bar = module.GetType ("Bar");
- var pan = bar.GetMethod ("PanPan");
- var parameter = pan.Parameters [1];
- Assert.IsTrue (parameter.HasMarshalInfo);
- var info = (ArrayMarshalInfo) parameter.MarshalInfo;
- Assert.AreEqual (NativeType.I8, info.ElementType);
- Assert.AreEqual (66, info.Size);
- Assert.AreEqual (2, info.SizeParameterIndex);
- parameter = pan.Parameters [3];
- Assert.IsTrue (parameter.HasMarshalInfo);
- info = (ArrayMarshalInfo) parameter.MarshalInfo;
- Assert.AreEqual (NativeType.I2, info.ElementType);
- Assert.AreEqual (-1, info.Size);
- Assert.AreEqual (-1, info.SizeParameterIndex);
- });
- }
- [Test]
- public void ArrayMarshalerSized ()
- {
- TestModule ("marshal.dll", module => {
- var delegate_type = module.GetType ("SomeMethod");
- var parameter = delegate_type.GetMethod ("Invoke").Parameters [1];
- Assert.IsTrue (parameter.HasMarshalInfo);
- var array_info = (ArrayMarshalInfo) parameter.MarshalInfo;
- Assert.IsNotNull (array_info);
- Assert.AreEqual (0, array_info.SizeParameterMultiplier);
- });
- }
- [Test]
- public void NullableConstant ()
- {
- TestModule ("nullable-constant.exe", module => {
- var type = module.GetType ("Program");
- var method = type.GetMethod ("Foo");
- Assert.IsTrue (method.Parameters [0].HasConstant);
- Assert.IsTrue (method.Parameters [1].HasConstant);
- Assert.IsTrue (method.Parameters [2].HasConstant);
- Assert.AreEqual (1234, method.Parameters [0].Constant);
- Assert.AreEqual (null, method.Parameters [1].Constant);
- Assert.AreEqual (12, method.Parameters [2].Constant);
- });
- }
- [Test]
- public void BoxedDefaultArgumentValue ()
- {
- TestModule ("boxedoptarg.dll", module => {
- var foo = module.GetType ("Foo");
- var bar = foo.GetMethod ("Bar");
- var baz = bar.Parameters [0];
- Assert.IsTrue (baz.HasConstant);
- Assert.AreEqual (-1, baz.Constant);
- });
- }
- [Test]
- public void AddParameterIndex ()
- {
- var object_ref = new TypeReference ("System", "Object", null, null, false);
- var method = new MethodDefinition ("foo", MethodAttributes.Static, object_ref);
- var x = new ParameterDefinition ("x", ParameterAttributes.None, object_ref);
- var y = new ParameterDefinition ("y", ParameterAttributes.None, object_ref);
- method.Parameters.Add (x);
- method.Parameters.Add (y);
- Assert.AreEqual (0, x.Index);
- Assert.AreEqual (1, y.Index);
- Assert.AreEqual (method, x.Method);
- Assert.AreEqual (method, y.Method);
- }
- [Test]
- public void RemoveAtParameterIndex ()
- {
- var object_ref = new TypeReference ("System", "Object", null, null, false);
- var method = new MethodDefinition ("foo", MethodAttributes.Static, object_ref);
- var x = new ParameterDefinition ("x", ParameterAttributes.None, object_ref);
- var y = new ParameterDefinition ("y", ParameterAttributes.None, object_ref);
- var z = new ParameterDefinition ("y", ParameterAttributes.None, object_ref);
- method.Parameters.Add (x);
- method.Parameters.Add (y);
- method.Parameters.Add (z);
- Assert.AreEqual (0, x.Index);
- Assert.AreEqual (1, y.Index);
- Assert.AreEqual (2, z.Index);
- method.Parameters.RemoveAt (1);
- Assert.AreEqual (0, x.Index);
- Assert.AreEqual (-1, y.Index);
- Assert.AreEqual (1, z.Index);
- }
- [Test]
- public void RemoveParameterIndex ()
- {
- var object_ref = new TypeReference ("System", "Object", null, null, false);
- var method = new MethodDefinition ("foo", MethodAttributes.Static, object_ref);
- var x = new ParameterDefinition ("x", ParameterAttributes.None, object_ref);
- var y = new ParameterDefinition ("y", ParameterAttributes.None, object_ref);
- var z = new ParameterDefinition ("y", ParameterAttributes.None, object_ref);
- method.Parameters.Add (x);
- method.Parameters.Add (y);
- method.Parameters.Add (z);
- Assert.AreEqual (0, x.Index);
- Assert.AreEqual (1, y.Index);
- Assert.AreEqual (2, z.Index);
- method.Parameters.Remove (y);
- Assert.AreEqual (0, x.Index);
- Assert.AreEqual (-1, y.Index);
- Assert.AreEqual (1, z.Index);
- }
- [Test]
- public void InsertParameterIndex ()
- {
- var object_ref = new TypeReference ("System", "Object", null, null, false);
- var method = new MethodDefinition ("foo", MethodAttributes.Static, object_ref);
- var x = new ParameterDefinition ("x", ParameterAttributes.None, object_ref);
- var y = new ParameterDefinition ("y", ParameterAttributes.None, object_ref);
- var z = new ParameterDefinition ("y", ParameterAttributes.None, object_ref);
- method.Parameters.Add (x);
- method.Parameters.Add (z);
- Assert.AreEqual (0, x.Index);
- Assert.AreEqual (-1, y.Index);
- Assert.AreEqual (1, z.Index);
- method.Parameters.Insert (1, y);
- Assert.AreEqual (0, x.Index);
- Assert.AreEqual (1, y.Index);
- Assert.AreEqual (2, z.Index);
- }
- [Test]
- public void GenericParameterConstant ()
- {
- TestIL ("hello.il", module => {
- var foo = module.GetType ("Foo");
- var method = foo.GetMethod ("GetState");
- Assert.IsNotNull (method);
- var parameter = method.Parameters [1];
- Assert.IsTrue (parameter.HasConstant);
- Assert.IsNull (parameter.Constant);
- });
- }
- [Test]
- public void NullablePrimitiveParameterConstant ()
- {
- TestModule ("nullable-parameter.dll", module => {
- var test = module.GetType ("Test");
- var method = test.GetMethod ("Foo");
- Assert.IsNotNull (method);
- var param = method.Parameters [0];
- Assert.IsTrue (param.HasConstant);
- Assert.AreEqual (1234, param.Constant);
- param = method.Parameters [1];
- Assert.IsTrue (param.HasConstant);
- Assert.AreEqual (null, param.Constant);
- param = method.Parameters [2];
- Assert.IsTrue (param.HasConstant);
- Assert.AreEqual (12, param.Constant);
- });
- }
- }
- }