Xamarin Public Jenkins (auto-signing) 966bba02bb Imported Upstream version 5.2.0.175
Former-commit-id: bb0468d0f257ff100aa895eb5fe583fb5dfbf900
2017-06-07 13:16:24 +00:00

1443 lines
42 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Dynamic;
using System.Linq.Expressions;
using Microsoft.CSharp.RuntimeBinder;
using System.Runtime.CompilerServices;
enum Enum
{
A = 3
}
class AssertDynamicObject : DynamicMetaObject
{
DynamicObjectMock mock;
public AssertDynamicObject (DynamicObjectMock mock, Expression parameter)
: base (parameter, BindingRestrictions.Empty, mock)
{
this.mock = mock;
}
DynamicMetaObject GetFakeMetaObject (object value)
{
Type t = value == null ? typeof (object) : value.GetType ();
Expression<Func<object>> et = () => value;
Expression restr = Expression.Constant (true);
return new DynamicMetaObject (Expression.Convert (et.Body, t), BindingRestrictions.GetExpressionRestriction (restr));
}
public override DynamicMetaObject BindBinaryOperation (BinaryOperationBinder binder, DynamicMetaObject arg)
{
if (mock.BinaryOperation == null)
throw new ApplicationException ("Unexpected BindBinaryOperation");
mock.BinaryOperation (binder, arg.Value);
return GetFakeMetaObject (new object ());
}
public override DynamicMetaObject BindConvert (ConvertBinder binder)
{
if (mock.ConvertOperation == null)
throw new ApplicationException ("Unexpected BindConvert");
var r = mock.ConvertOperation (binder);
return GetFakeMetaObject (r);
}
public override DynamicMetaObject BindGetIndex (GetIndexBinder binder, DynamicMetaObject[] indexes)
{
if (mock.GetIndexOperation == null)
throw new ApplicationException ("Unexpected TryGetIndex");
mock.GetIndexOperation (binder, indexes.Select (l => l.Value).ToArray ());
return GetFakeMetaObject (new object ());
}
public override DynamicMetaObject BindGetMember (GetMemberBinder binder)
{
if (mock.GetMemberOperation == null)
throw new ApplicationException ("Unexpected BindGetMember");
var r = mock.GetMemberOperation (binder);
return GetFakeMetaObject (r);
}
public override DynamicMetaObject BindInvoke (InvokeBinder binder, DynamicMetaObject[] args)
{
if (mock.InvokeOperation == null)
throw new ApplicationException ("Unexpected BindInvoke");
mock.InvokeOperation (binder, args.Select (l => l.Value).ToArray ());
return GetFakeMetaObject (new object ());
}
public override DynamicMetaObject BindInvokeMember (InvokeMemberBinder binder, DynamicMetaObject[] args)
{
if (mock.InvokeMemberOperation == null)
throw new ApplicationException ("Unexpected BindInvokeMember");
mock.InvokeMemberOperation (binder, args.Select (l => l.Value).ToArray ());
return GetFakeMetaObject (new object ());
}
public override DynamicMetaObject BindSetIndex (SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
{
if (mock.SetIndexOperation == null)
throw new ApplicationException ("Unexpected TrySetIndex");
mock.SetIndexOperation (binder, indexes.Select (l => l.Value).ToArray (), value.Value);
return GetFakeMetaObject (new object ());
}
public override DynamicMetaObject BindSetMember (SetMemberBinder binder, DynamicMetaObject value)
{
if (mock.SetMemberOperation == null)
throw new ApplicationException ("Unexpected BindSetMember");
mock.SetMemberOperation (binder, value.Value);
return GetFakeMetaObject (new object ());
}
public override DynamicMetaObject BindUnaryOperation (UnaryOperationBinder binder)
{
if (mock.UnaryOperation == null)
throw new ApplicationException ("Unexpected BindUnaryOperation");
var r = mock.UnaryOperation (binder);
return GetFakeMetaObject (r);
}
}
class DynamicObjectMock : DynamicObject
{
public int HitCounter;
public DynamicObjectMock ()
{
}
public override DynamicMetaObject GetMetaObject (System.Linq.Expressions.Expression parameter)
{
HitCounter++;
return new AssertDynamicObject (this, parameter);
}
public Action<BinaryOperationBinder, object> BinaryOperation;
public Func<ConvertBinder, object> ConvertOperation;
public Action<GetIndexBinder, object[]> GetIndexOperation;
public Func<GetMemberBinder, object> GetMemberOperation;
public Action<InvokeBinder, object[]> InvokeOperation;
public Action<InvokeMemberBinder, object[]> InvokeMemberOperation;
public Action<SetIndexBinder, object[], object> SetIndexOperation;
public Action<SetMemberBinder, object> SetMemberOperation;
public Func<UnaryOperationBinder, object> UnaryOperation;
// Dynamic arguments methods
public DynamicObjectMock (int i)
{
}
public void DMethod (int a)
{
}
public static void DStaticMethod (object t)
{
}
public int this[int i] {
get {
return i;
}
set { }
}
}
class Tester : DynamicObjectMock
{
static readonly int field = 7;
public Tester ()
{
}
public Tester (dynamic d)
{
}
static void Assert<T> (T expected, T value, string name)
{
if (!EqualityComparer<T>.Default.Equals (expected, value)) {
if (!string.IsNullOrEmpty (name))
name += ": ";
throw new ApplicationException (name + "Expected " + expected + " != " + value);
}
}
static void Assert<T> (IList<T> expected, IList<T> value, string name)
{
if (expected == null) {
if (value != null)
throw new ApplicationException (name + ": Both arrays expected to be null");
return;
}
if (expected.Count != value.Count)
throw new ApplicationException (name + ": Array length does not match " + expected.Count + " != " + value.Count);
for (int i = 0; i < expected.Count; ++i) {
if (!EqualityComparer<T>.Default.Equals (expected[i], value[i]))
throw new ApplicationException (name + ": Index " + i + ": " + expected[i] + " != " + value[i]);
}
}
static PropertyInfo flags = typeof (CSharpArgumentInfo).GetProperty ("Flags", BindingFlags.NonPublic | BindingFlags.Instance);
static void AssertArgument (CallSiteBinder obj, CSharpArgumentInfo[] expected, string name)
{
var ai = obj.GetType ().GetField ("_argumentInfo", BindingFlags.NonPublic | BindingFlags.Instance);
if (ai == null)
throw new ApplicationException ("Could not find 'argumentInfo' private field on " + obj.GetType ());
IList<CSharpArgumentInfo> values = (IList<CSharpArgumentInfo>) ai.GetValue (obj);
if (values.Count != expected.Length)
throw new ApplicationException (name + ": Array length does not match " + values.Count + " != " + expected.Length);
for (int i = 0; i < expected.Length; i++) {
Assert (flags.GetValue (expected[i]), flags.GetValue (values[i]), "flags");
}
}
#pragma warning disable 168, 169, 219
void BinaryAdd_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Add, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d + 1;
}
void BinaryAdd_2 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Add, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, null, "arg");
};
int? v = null;
d = d + v;
}
void BinaryAdd_3 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Add, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
}, "ArgumentInfo");
Assert (arg, Enum.A, "arg");
};
d = d + Enum.A;
}
void BinaryAdd_4 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Add, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 7, "arg");
};
d = d + Tester.field;
}
void BinaryAddChecked_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Add, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null) },
"ArgumentInfo");
Assert (arg, 3, "arg");
};
d = checked (d + 3);
}
void BinaryAddChecked_2 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Add, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null) },
"ArgumentInfo");
Assert (arg, 3, "arg");
};
Func<dynamic> r;
checked {
r = () => d + 3;
}
r ();
}
void BinaryAddAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.AddAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d += 1;
}
void BinaryAddAssignChecked_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.AddAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
checked {
d += 1;
}
}
void BinaryAnd_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.And, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d & 1;
}
void BinaryAndAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.AndAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d &= 1;
}
void BinaryDivide_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Divide, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d / 1;
}
void BinaryDivideAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.DivideAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d /= 1;
}
void BinaryEqual_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Equal, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d == 1;
}
void BinaryExclusiveOr_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.ExclusiveOr, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d ^ 1;
}
void BinaryExclusiveOrAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.ExclusiveOrAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d ^= 1;
}
void BinaryGreaterThan_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.GreaterThan, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d > 1;
}
void BinaryGreaterThanOrEqual_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.GreaterThanOrEqual, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d >= 1;
}
void BinaryLeftShift_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.LeftShift, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d << 1;
}
void BinaryLeftShiftAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.LeftShiftAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d <<= 1;
}
void BinaryLessThan_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.LessThan, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d < 1;
}
void BinaryLessThanOrEqual_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.LessThanOrEqual, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d <= 1;
}
void BinaryLogicalAnd_1 (dynamic d, DynamicObjectMock mock)
{
mock.HitCounter = 1;
bool b = false;
d = b && d;
}
void BinaryLogicalOr_1 (dynamic d, DynamicObjectMock mock)
{
mock.HitCounter = 1;
bool b = true;
d = b || d;
}
void BinaryModulo_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Modulo, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d % 1;
}
void BinaryModuloAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.ModuloAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d %= 1;
}
void BinaryMultiply_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Multiply, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d * 1;
}
void BinaryMultiplyAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.MultiplyAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d *= 1;
}
void BinaryNotEqual_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.NotEqual, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 4, "arg");
};
d = d != 4;
}
void BinaryOr_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Or, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 2, "arg");
};
d = d | 2;
}
void BinaryOrAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.OrAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 2, "arg");
};
d |= 2;
}
void BinaryRightShift_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.RightShift, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d >> 1;
}
void BinaryRightShiftAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.RightShiftAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d >>= 1;
}
void BinarySubtract_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Subtract, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d = d - 1;
}
void BinarySubtractAssign_1 (dynamic d, DynamicObjectMock mock)
{
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.SubtractAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, 1, "arg");
};
d -= 1;
}
void Convert_1 (dynamic d, DynamicObjectMock mock)
{
mock.ConvertOperation = (binder) => {
Assert (binder.Explicit, true, "Explicit");
Assert (binder.Type, typeof (byte), "Type");
return (byte) 1;
};
object b = (byte) d;
}
void Convert_2 (dynamic d, DynamicObjectMock mock)
{
mock.ConvertOperation = (binder) => {
Assert (binder.Explicit, false, "Explicit");
Assert (binder.Type, typeof (int), "Type");
return 1;
};
object[] o = new object[2];
d = o[d];
}
void Convert_3 (dynamic d, DynamicObjectMock mock)
{
mock.ConvertOperation = (binder) => {
Assert (binder.Explicit, true, "Explicit");
// Assert (binder.IsChecked, true, "IsChecked");
Assert (binder.Type, typeof (byte), "Type");
return (byte) 2;
};
object b = checked ((byte) d);
}
void Convert_4 (dynamic d, DynamicObjectMock mock)
{
mock.ConvertOperation = (binder) => {
Assert (binder.Explicit, false, "Explicit");
Assert (binder.Type, typeof (int), "Type");
return 5;
};
var g = new int[d];
}
void Convert_5 (dynamic d, DynamicObjectMock mock)
{
int counter = 0;
mock.ConvertOperation = (binder) => {
Assert (binder.Explicit, false, "Explicit");
Assert (binder.Type, typeof (System.Collections.IEnumerable), "Type");
return new object[] { 1 };
};
foreach (int v in d) {
// Console.WriteLine (v);
}
}
void GetIndex_1 (dynamic d, DynamicObjectMock mock)
{
mock.GetIndexOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert ((IList<object>) args, new object[] { 0 }, "args");
};
var o = d[0];
}
void GetIndex_2 (dynamic d, DynamicObjectMock mock)
{
mock.GetIndexOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (2, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert ((IList<object>) args, new object[] { 2, 3 }, "args");
};
object i = 3;
var o = d[2, i];
}
void GetIndex_3 (dynamic d, DynamicObjectMock mock)
{
mock.GetIndexOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null) },
"ArgumentInfo");
Assert ((IList<object>) args, new object[] { d }, "args");
};
var o = mock[d];
}
void GetMember_1 (dynamic d, DynamicObjectMock mock)
{
mock.GetMemberOperation = (binder) => {
Assert (binder.Name, "Foo", "Name");
Assert (binder.IgnoreCase, false, "IgnoreCase");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null) },
"ArgumentInfo");
return null;
};
var g = d.Foo;
}
void Invoke_1 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (2, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null)
}, "ArgumentInfo");
Assert ((IList<object>) args, new object[] { "foo", null }, "args");
};
d ("foo", null);
}
void Invoke_2 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (0, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null) },
"ArgumentInfo");
Assert ((IList<object>) args, new object[0], "args");
};
d ();
}
void Invoke_3 (dynamic d, DynamicObjectMock mock)
{
try {
Math.Max (d, d);
Assert (true, false, "No hook expected to be hit");
} catch (RuntimeBinderException) {
}
}
void Invoke_4 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (2, new string[] { "name" }), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.NamedArgument | CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, "name")
}, "ArgumentInfo");
Assert ((IList<object>) args, new object[] { typeof (bool), -1 }, "args");
};
d (typeof (bool), name: -1);
}
void Invoke_5 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
}, "ArgumentInfo");
Assert ((IList<object>) args, new object[] { "a" }, "args");
};
Action<dynamic> a = (i) => { i ("a"); };
a (d);
}
void Invoke_6 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
}, "ArgumentInfo");
Assert ((IList<object>) args, new object[] { 3 }, "args");
};
d (1 + 2);
}
void InvokeMember_1 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeMemberOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)},
"ArgumentInfo");
Assert (binder.IgnoreCase, false, "IgnoreCase");
Assert ((IList<object>) args, new object[] { 'a' }, "args");
};
d.Max ('a');
}
void InvokeMember_2 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeMemberOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)},
"ArgumentInfo");
Assert (binder.IgnoreCase, false, "IgnoreCase");
Assert ((IList<object>) args, new object[] { mock }, "args");
};
mock.DMethod (d);
}
void InvokeMember_3 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeMemberOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.IsRef | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (binder.IgnoreCase, false, "IgnoreCase");
Assert ((IList<object>) args, new object[] { 9 }, "args");
};
int i = 9;
d.Max (ref i);
}
void InvokeMember_4 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeMemberOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.IsOut | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (binder.IgnoreCase, false, "IgnoreCase");
Assert ((IList<object>) args, new object[] { 0 }, "args");
};
int i;
d.Max (out i);
}
void InvokeMember_5 (dynamic d, DynamicObjectMock mock)
{
DynamicObjectMock.DStaticMethod (d);
}
void InvokeMember_6 (dynamic d, DynamicObjectMock mock)
{
InvokeMemberOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (2, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null),
}, "ArgumentInfo");
Assert (binder.IgnoreCase, false, "IgnoreCase");
Assert ((IList<object>) args, new object[] { d, null }, "args");
};
InvokeMember_5 (d, null);
}
void InvokeMember_7 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeMemberOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (0, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
Assert (binder.IgnoreCase, false, "IgnoreCase");
Assert ((IList<object>) args, new object[0], "args");
};
d.Max<dynamic> ();
}
void InvokeMember_8 (dynamic d, DynamicObjectMock mock)
{
mock.InvokeMemberOperation = (binder, args) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.IsRef | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (binder.IgnoreCase, false, "IgnoreCase");
Assert ((IList<object>) args, new object[] { 9 }, "args");
};
dynamic i = 9;
d.Max (ref i);
}
void SetIndex_1 (dynamic d, DynamicObjectMock mock)
{
mock.SetIndexOperation = (binder, args, value) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)},
"ArgumentInfo");
Assert ((IList<object>) args, new object[] { 0 }, "args");
Assert (value, 2m, "value");
};
d[0] = 2m;
}
void SetIndex_2 (dynamic d, DynamicObjectMock mock)
{
mock.SetIndexOperation = (binder, args, value) => {
Assert (binder.CallInfo, new CallInfo (2, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)
}, "ArgumentInfo");
Assert ((IList<object>) args, new object[] { 2, 3 }, "args");
Assert (value, -8, "value");
};
object i = 3;
d[2, i] = -8;
}
void SetIndex_3 (dynamic d, DynamicObjectMock mock)
{
mock.SetIndexOperation = (binder, args, value) => {
Assert (binder.CallInfo, new CallInfo (1, new string[0]), "CallInfo");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null)
}, "ArgumentInfo");
Assert ((IList<object>) args, new object[] { d }, "args");
Assert (value, this, "value");
};
mock[d] = this;
}
void SetMember_1 (dynamic d, DynamicObjectMock mock)
{
const double d_const = 2.4;
mock.SetMemberOperation = (binder, value) => {
Assert (binder.Name, "Foo", "Name");
Assert (binder.IgnoreCase, false, "IgnoreCase");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
}, "ArgumentInfo");
Assert (value, d_const, "value");
};
d.Foo = d_const;
}
void SetMember_2 (dynamic d, DynamicObjectMock mock)
{
mock.GetMemberOperation = (binder) => {
Assert (binder.Name, "Foo", "Name");
Assert (binder.IgnoreCase, false, "IgnoreCase");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null) },
"ArgumentInfo");
return mock;
};
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.MultiplyAssign, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
"ArgumentInfo");
Assert (arg, null, "arg");
};
mock.SetMemberOperation = (binder, value) => {
Assert (binder.Name, "Foo", "Name");
Assert (binder.IgnoreCase, false, "IgnoreCase");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
};
d.Foo *= null;
}
void UnaryPlus_1 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.UnaryPlus, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return null;
};
d = +d;
}
void UnaryMinus_1 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.Negate, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return null;
};
d = -d;
}
void UnaryNot_1 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.Not, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return null;
};
d = !d;
}
void UnaryOnesComplement_1 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.OnesComplement, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return null;
};
d = ~d;
}
void UnaryDecrement_1 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.Decrement, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return null;
};
d = --d;
}
void UnaryDecrement_2 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.Decrement, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return new object ();
};
d = d--;
}
void UnaryIncrement_1 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.Increment, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return null;
};
d = ++d;
}
void UnaryIncrement_2 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.Increment, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return new object ();
};
d = d++;
}
void UnaryIsFalse_1 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.IsFalse, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return true;
};
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Equal, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
"ArgumentInfo");
Assert (arg, null, "arg");
};
object x = d == null;
}
void UnaryIsFalse_2 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.IsFalse, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return true;
};
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.NotEqual, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
"ArgumentInfo");
Assert (arg, null, "arg");
};
object x = d != null;
}
void UnaryIsFalse_3 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.IsFalse, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return true;
};
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.And, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
"ArgumentInfo");
Assert (arg, null, "arg");
};
object x = d && null;
}
void UnaryIsTrue_1 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.IsTrue, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return true;
};
object g = d ? 1 : 4;
}
void UnaryIsTrue_2 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.IsTrue, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return false;
};
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Or, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant, null) },
"ArgumentInfo");
Assert (arg, null, "arg");
};
object x = d || null;
}
void UnaryIsTrue_3 (dynamic d, DynamicObjectMock mock)
{
mock.UnaryOperation = (binder) => {
Assert (binder.Operation, ExpressionType.IsTrue, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null)
}, "ArgumentInfo");
return false;
};
mock.BinaryOperation = (binder, arg) => {
Assert (binder.Operation, ExpressionType.Or, "Operation");
AssertArgument (binder, new[] {
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType, null) },
"ArgumentInfo");
Assert (arg, false, "arg");
};
bool b = false;
object x = d || b;
}
#pragma warning restore 168, 169, 219
static bool RunTest (MethodInfo test)
{
Console.Write ("Running test {0, -25}", test.Name);
try {
var d = new DynamicObjectMock ();
test.Invoke (new Tester (), new[] { d, d });
if (d.HitCounter < 1)
Assert (true, false, "HitCounter");
Console.WriteLine ("OK");
return true;
} catch (Exception e) {
Console.WriteLine ("FAILED");
Console.WriteLine (e.ToString ());
return false;
}
}
public static int Main ()
{
var tests = from test in typeof (Tester).GetMethods (BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)
where test.GetParameters ().Length == 2
orderby test.Name
select RunTest (test);
int failures = tests.Count (a => !a);
Console.WriteLine (failures + " tests failed");
return failures;
}
}