public void Works_for_two_variables_and_3_2_values()
 {
     var vm = new MultipleVariableManager<Foo2>(new FooValues());
     var e = vm.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual("a", e.Current.X);
     AreEqual(1, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("a", e.Current.X);
     AreEqual(2, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("b", e.Current.X);
     AreEqual(1, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("b", e.Current.X);
     AreEqual(2, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("c", e.Current.X);
     AreEqual(1, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("c", e.Current.X);
     AreEqual(2, e.Current.Y);
     IsFalse(e.MoveNext());
 }
 public void Works_for_two_variables_and_3_2_values_provided_in_anonymous_object()
 {
     var vm = new MultipleVariableManager<Foo2>(new { X = new[] { "a", "b", "c" }, Y = new[] { 1, 2 } });
     var e = vm.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual("a", e.Current.X);
     AreEqual(1, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("a", e.Current.X);
     AreEqual(2, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("b", e.Current.X);
     AreEqual(1, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("b", e.Current.X);
     AreEqual(2, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("c", e.Current.X);
     AreEqual(1, e.Current.Y);
     IsTrue(e.MoveNext());
     AreEqual("c", e.Current.X);
     AreEqual(2, e.Current.Y);
     IsFalse(e.MoveNext());
 }
 public void Works_for_zero_variables()
 {
     var vm = new MultipleVariableManager<Foo0>(new { });
     var e = vm.GetEnumerator();
     IsFalse(e.MoveNext());
 }
 public void Works_for_one_variable_and_3_values_where_one_of_them_is_null()
 {
     var vm = new MultipleVariableManager<Foo1>(new { X = new[] { "a", null, "c" } });
     var e = vm.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual("a", e.Current.X);
     IsTrue(e.MoveNext());
     AreEqual(null, e.Current.X);
     IsTrue(e.MoveNext());
     AreEqual("c", e.Current.X);
     IsFalse(e.MoveNext());
 }
 public void Works_for_empty_multiple_possible_values()
 {
     var vm = new MultipleVariableManager<Foo1>(new { X = new string[] { } });
     var e = vm.GetEnumerator();
     IsFalse(e.MoveNext());
 }
 public void Works_for_multiple_possible_values()
 {
     var vm = new MultipleVariableManager<Foo1>(new { X = new[] { "a" } });
     var e = vm.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual("a", e.Current.X);
     IsFalse(e.MoveNext());
 }
 public void Works_for_single_possible_value_which_is_null()
 {
     var vm = new MultipleVariableManager<Foo1>(new { X = (string)null });
     var e = vm.GetEnumerator();
     IsTrue(e.MoveNext());
     IsNull(e.Current.X);
     IsFalse(e.MoveNext());
 }
 public void Works_when_there_are_more_properties_than_required_for_holding_possible_values()
 {
     var vm = new MultipleVariableManager<Foo1>(new { X = new[] { "a" }, Y = new[] { 1 }, Z = new[] { 1L } });
     var e = vm.GetEnumerator();
     IsTrue(e.MoveNext());
     AreEqual("a", e.Current.X);
     IsFalse(e.MoveNext());
 }
 public void Works_when_possible_values_are_null_but_variables_are_empty()
 {
     var vm = new MultipleVariableManager<Foo0>(null);
     var e = vm.GetEnumerator();
     IsFalse(e.MoveNext());
 }