public void Works_with_1_int_action_and_2_null_possible_arguments_and_1_string_mandatory_argument()
 {
     var function = new Action<int>(x => { });
     var sut = new Mandatory(function, new object[] { null, null }, "x");
     var e = sut.GetEnumerator();
     IsFalse(e.MoveNext());
 }
 public void Works_with_empty_action_and_1_string_mandatory_argument()
 {
     var function = new Action(() => { });
     var sut = new Mandatory(function, new object[0], "x");
     var e = sut.GetEnumerator();
     IsFalse(e.MoveNext());
 }
 public void Works_with_1_nullable_int_action_and_2_null_possible_arguments_and_1_int_mandatory_argument()
 {
     var result = "";
     var function = new Action<int?>(x => { result = Convert.ToString(x); });
     var sut = new Mandatory(function, new object[] { null, null }, 1);
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     e.Current.Function.DynamicInvoke();
     AreEqual("1", result);
     IsFalse(e.MoveNext());
 }
 public void Works_with_1_string_action_and_1_string_mandatory_argument()
 {
     var result = "";
     var function = new Action<string>(x => { result = x; });
     var sut = new Mandatory(function, new object[0], "x");
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     e.Current.Function.DynamicInvoke();
     AreEqual("x", result);
     IsFalse(e.MoveNext());
 }
 public void Works_with_3_string_func_and_2_int_2_string_possible_arguments_and_1_string_mandatory_argument()
 {
     var function = new Func<string, string, string, string>((x, y, z) => z + y + x);
     var sut = new Mandatory(function, new object[] { 1, 2, "a", "b" }, "x");
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual("aax", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("bax", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("abx", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("bbx", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("axa", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("bxa", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("axb", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("bxb", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("xaa", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("xba", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("xab", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("xbb", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("axx", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("bxx", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("xax", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("xbx", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("xxa", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("xxb", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("xxx", e.Current.Function.DynamicInvoke());
     IsFalse(e.MoveNext());
 }
 public void Works_with_2_int_1_string_func_and_2_int_2_string_possible_arguments_and_1_int_mandatory_argument()
 {
     var function = new Func<int, int, string, string>((x, y, z) => z + y + x);
     var sut = new Mandatory(function, new object[] { 1, 2, "a", "b" }, 3);
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual("a13", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("b13", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("a23", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("b23", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("a31", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("b31", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("a32", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("b32", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("a33", e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual("b33", e.Current.Function.DynamicInvoke());
     IsFalse(e.MoveNext());
 }
 public void Works_with_1_int_1_string_func_and_1_int_2_string_possible_arguments_and_1_string_mandatory_argument()
 {
     var function = new Func<int, string, string>((x, y) => y + x);
     var sut = new Mandatory(function, new object[] { 1, "a", "b" }, "x");
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual("x1", e.Current.Function.DynamicInvoke());
     IsFalse(e.MoveNext());
 }
 public void Works_with_1_int_1_string_func_and_1_int_possible_argument_and_1_int_mandatory_argument()
 {
     var function = new Func<int, string, string>((x, y) => y + x);
     var sut = new Mandatory(function, new object[] { 1 }, 2);
     var e = sut.GetEnumerator();
     IsFalse(e.MoveNext());
 }
 public void Works_with_2_int_func_and_1_int_possible_argument_and_1_int_mandatory_argument()
 {
     var function = new Func<int, int, int>((x, y) => x + y);
     var sut = new Mandatory(function, new object[] { 1 }, 2);
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual(3, e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual(3, e.Current.Function.DynamicInvoke());
     IsTrue(e.MoveNext());
     AreEqual(4, e.Current.Function.DynamicInvoke());
     IsFalse(e.MoveNext());
 }
 public void Works_with_2_string_func_and_2_string_possible_arguments_and_1_int_mandatory_argument()
 {
     var function = new Func<string, string, string>((x, y) => x + y);
     var sut = new Mandatory(function, new object[] { "a", "b" }, 1);
     var e = sut.GetEnumerator();
     IsFalse(e.MoveNext());
 }
 public void Works_with_1_int_func_and_2_int_1_string_possible_arguments_and_1_int_mandatory_argument()
 {
     var function = new Func<int, int>(x => x);
     var sut = new Mandatory(function, new object[] { 1, 2, "a" }, 3);
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual(3, e.Current.Function.DynamicInvoke());
     IsFalse(e.MoveNext());
 }
 public void Works_with_1_int_func_and_1_int_mandatory_argument()
 {
     var function = new Func<int, int>(x => x);
     var sut = new Mandatory(function, new object[0], 1);
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual(1, e.Current.Function.DynamicInvoke());
     IsFalse(e.MoveNext());
 }
 public void Works_with_1_int_func_and_1_string_mandatory_argument()
 {
     var function = new Func<int, int>(x => x);
     var sut = new Mandatory(function, new object[0], "x");
     var e = sut.GetEnumerator();
     IsFalse(e.MoveNext());
 }
 public void Works_with_1_int_action_and_2_int_1_string_possible_arguments_and_1_int_mandatory_argument()
 {
     object result = -1;
     var function = new Action<int>(x => { result = x; });
     var sut = new Mandatory(function, new object[] { 1, 2, "a" }, 3);
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     e.Current.Function.DynamicInvoke();
     AreEqual(3, result);
     IsFalse(e.MoveNext());
 }
 public void Works_with_1_string_1_nullable_int_action_and_2_null_1_int_possible_arguments_and_1_string_mandatory_argument()
 {
     var result = "";
     var function = new Action<int?, string>((x, y) => { result = y + x; });
     var sut = new Mandatory(function, new object[] { null, null, 1 }, "x");
     var e = sut.GetEnumerator();
     IsTrue(e.MoveNext());
     e.Current.Function.DynamicInvoke();
     AreEqual("x", result);// 1null x
     IsTrue(e.MoveNext());
     e.Current.Function.DynamicInvoke();
     AreEqual("x", result); // 2null x
     IsTrue(e.MoveNext());
     e.Current.Function.DynamicInvoke();
     AreEqual("x1", result); // 1 x
     IsFalse(e.MoveNext());
 }