public void SwitchCaseDefault_Properties() { var b = new[] { Expression.Empty() }; var s1 = CSharpStatement.SwitchCaseDefault(b); var s2 = CSharpStatement.SwitchCaseDefault(b.AsEnumerable()); foreach (var s in new[] { s1, s2 }) { Assert.IsTrue(b.SequenceEqual(s.Statements)); Assert.AreSame(CSharpStatement.SwitchCaseDefaultValue, s.TestValues.Single()); Assert.AreEqual("default", s.TestValues.Single().ToString()); } }
public void Switch_Compile_String_Default2() { AssertCompile <string>((log, v) => SwitchLogValue(log, v, CSharpStatement.SwitchCaseDefault(log("D")), CSharpStatement.SwitchCase(new[] { "1" }, log("A")) ), new Asserts <string> { { "0", "E", "D" }, { "1", "E", "A" }, { "2", "E", "D" }, { null, "E", "D" }, } ); }
public void SwitchCase_Factory_ArgumentChecking() { var body = new[] { Expression.Empty() }; var vals = new[] { 1, 2 }; var objs = new object[] { 1, 2 }; // null AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCase(default(int[]), body)); AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCase(default(IEnumerable <int>), body)); AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCase(default(object[]), body)); AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCase(default(IEnumerable <object>), body)); AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCase(vals, default(Expression[]))); AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCase(vals, default(IEnumerable <Expression>))); AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCase(objs, default(Expression[]))); AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCase(objs, default(IEnumerable <Expression>))); AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCaseDefault(default(Expression[]))); AssertEx.Throws <ArgumentNullException>(() => CSharpStatement.SwitchCaseDefault(default(IEnumerable <Expression>))); // empty AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(Array.Empty <int>(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(Enumerable.Empty <int>(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(Array.Empty <object>(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(Enumerable.Empty <object>(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(vals, Array.Empty <Expression>())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(vals, Enumerable.Empty <Expression>())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(objs, Array.Empty <Expression>())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(objs, Enumerable.Empty <Expression>())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCaseDefault(Array.Empty <Expression>())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCaseDefault(Enumerable.Empty <Expression>())); // switch type AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new double[] { 0.0 }, body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new double[] { 0.0 }.AsEnumerable(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new double[] { 0.0 }, body.AsEnumerable())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new double[] { 0.0 }.AsEnumerable(), body.AsEnumerable())); // duplicate value AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new int[] { 1, 1, 2 }, body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new int[] { 1, 2, 1 }, body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new int[] { 1, 2, 1 }.AsEnumerable(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { 1, 2, 1 }, body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { 1, 2, 1 }.AsEnumerable(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new int[] { 1, 1, 2 }, body.AsEnumerable())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new int[] { 1, 2, 1 }, body.AsEnumerable())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new int[] { 1, 2, 1 }.AsEnumerable(), body.AsEnumerable())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { 1, 2, 1 }, body.AsEnumerable())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { 1, 2, 1 }.AsEnumerable(), body.AsEnumerable())); // inconsistent typing AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { null, "foo", 1 }.AsEnumerable(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { "foo", null, 1 }.AsEnumerable(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { 1, 2L }.AsEnumerable(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { null, 1, 2L }.AsEnumerable(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { 1, null, 2L }.AsEnumerable(), body)); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { null, "foo", 1 }.AsEnumerable(), body.AsEnumerable())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { "foo", null, 1 }.AsEnumerable(), body.AsEnumerable())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { 1, 2L }.AsEnumerable(), body.AsEnumerable())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { null, 1, 2L }.AsEnumerable(), body.AsEnumerable())); AssertEx.Throws <ArgumentException>(() => CSharpStatement.SwitchCase(new object[] { 1, null, 2L }.AsEnumerable(), body.AsEnumerable())); // those are ok CSharpStatement.SwitchCase(new int?[] { null, 1 }, body); CSharpStatement.SwitchCase(new string[] { null, "bar" }, body); CSharpStatement.SwitchCase(new int?[] { 1, null }, body); CSharpStatement.SwitchCase(new string[] { "bar", null }, body); CSharpStatement.SwitchCase(new object[] { null }, body); CSharpStatement.SwitchCase(new object[] { null }.AsEnumerable(), body); }