Ejemplo n.º 1
0
        public void Test_StructArg_Nested()
        {
            var methodInfo = GetMethod(nameof(Dummy_OuterStructArg));

            ZilObject[] args =
            {
                new ZilVector(
                    new ZilFix(123),
                    new ZilList(new ZilObject[]
                {
                    new ZilFix(456),
                    ZilString.FromString("foo")
                })
                    )
            };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected =
            {
                ctx,
                new OuterStruct
                {
                    arg1 = 123,
                    arg2 = new IntStringStruct
                    {
                        arg1 = 456,
                        arg2 = "foo"
                    }
                }
            };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 2
0
        public void Test_StructArg_Nested_Fail_WrongStructureType()
        {
            const string SExpectedMessage = "dummy: arg 1: element 2: expected LIST";

            var methodInfo = GetMethod(nameof(Dummy_OuterStructArg));

            ZilObject[] args =
            {
                new ZilVector(
                    new ZilFix(123),
                    new ZilVector(
                        new ZilFix(456),
                        ZilString.FromString("foo")
                        )
                    )
            };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            try
            {
                decoder.Decode("dummy", ctx, args);
            }
            catch (ArgumentTypeError ex)
            {
                StringAssert.EndsWith(ex.Message, SExpectedMessage);
                return;
            }

            Assert.Fail($"Expected {typeof(ArgumentTypeError)}");
        }
Ejemplo n.º 3
0
        public void Test_SequenceArrayArg()
        {
            var methodInfo = GetMethod(nameof(Dummy_IntStringSequenceArrayArg));

            ZilObject[] args =
            {
                new ZilFix(1), ZilString.FromString("money"),
                new ZilFix(2), ZilString.FromString("show")
            };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected =
            {
                ctx,
                new[]
                {
                    new IntStringSequence {
                        arg1 = 1,arg2               = "money"
                    },
                    new IntStringSequence {
                        arg1 = 2,arg2               = "show"
                    }
                }
            };

            Assert.AreEqual(2, actual.Length);
            Assert.AreEqual(expected[0], actual[0]);
            Assert.IsInstanceOfType(actual[1], typeof(IntStringSequence[]));
            CollectionAssert.AreEqual((IntStringSequence[])expected[1], (IntStringSequence[])actual[1]);
        }
Ejemplo n.º 4
0
        public void Test_StructArg_Fail_WrongElementType()
        {
            const string SExpectedMessage = "dummy: arg 1: element 2: expected STRING";

            var methodInfo = GetMethod(nameof(Dummy_IntStringStructArg));

            ZilObject[] args =
            {
                new ZilList(new[] { new ZilFix(123), ctx.FALSE })
            };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            try
            {
                decoder.Decode("dummy", ctx, args);
            }
            catch (ArgumentTypeError ex)
            {
                StringAssert.EndsWith(ex.Message, SExpectedMessage);
                return;
            }

            Assert.Fail($"Expected {nameof(ArgumentTypeError)}");
        }
Ejemplo n.º 5
0
        public void Test_OptionalArg_Fail_OmittedAndExtraArgs()
        {
            const string SExpectedMessage    = "dummy: too many args, starting at arg 2";
            const string SExpectedSubMessage = "check types of earlier args, e.g. arg 1";

            var methodInfo = GetMethod(nameof(Dummy_OptionalIntThenStringArg));

            ZilObject[] args = { ZilString.FromString("foo"), new ZilFix(123) };

            try
            {
                var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
                decoder.Decode("dummy", ctx, args);
            }
            catch (ArgumentCountError ex)
            {
                StringAssert.EndsWith(ex.Message, SExpectedMessage);
                Assert.AreEqual(1, ex.Diagnostic.SubDiagnostics.Count);
                var sd = ex.Diagnostic.SubDiagnostics[0];
                Assert.AreEqual(SExpectedSubMessage, sd.GetFormattedMessage());
                return;
            }

            Assert.Fail($"Expected {typeof(ArgumentCountError)}");
        }
Ejemplo n.º 6
0
        public void Test_StructArg_Optional()
        {
            var methodInfo = GetMethod(nameof(Dummy_OptionalStructArrayArg));

            ZilObject[] args =
            {
                new ZilVector(
                    ZilString.FromString("o'clock"),
                    new ZilFix(4),
                    ZilString.FromString("o'clock"))
            };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected =
            {
                ctx,
                new OptionalStruct
                {
                    arg1 = 1,
                    arg2 = 2,
                    arg3 = 3,
                    arg4 = "o'clock",
                    arg5 = 4,
                    arg6 = "o'clock",
                    arg7 = "rock"
                }
            };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 7
0
        public void Test_EitherArg_Optional_WrongType()
        {
            var methodInfo = GetMethod(nameof(Dummy_OptionalIntOrStringThenAtomArg));

            ZilObject[] args = { ctx.FALSE };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            decoder.Decode("dummy", ctx, args);
        }
Ejemplo n.º 8
0
        public void Test_ZilObjectArrayArg_Required_Fail()
        {
            var methodInfo = GetMethod(nameof(Dummy_RequiredZilObjectArrayArg));

            ZilObject[] args = { };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            decoder.Decode("dummy", ctx, args);
        }
Ejemplo n.º 9
0
        public void Test_TooManyArgs()
        {
            var methodInfo = GetMethod(nameof(Dummy_IntArgs));

            ZilObject[] args = { new ZilFix(123), new ZilFix(456), new ZilFix(789) };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            decoder.Decode("dummy", ctx, args);
        }
Ejemplo n.º 10
0
        public void Test_OptionalArg_TooManyArgs()
        {
            var methodInfo = GetMethod(nameof(Dummy_OptionalIntArg));

            ZilObject[] args = { new ZilFix(1), new ZilFix(2) };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            decoder.Decode("dummy", ctx, args);
        }
Ejemplo n.º 11
0
        public void Test_OptionalArg_Fail_TooFewArgs()
        {
            var methodInfo = GetMethod(nameof(Dummy_OptionalIntThenStringArg));

            ZilObject[] args = { new ZilFix(42) };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            decoder.Decode("dummy", ctx, args);
        }
Ejemplo n.º 12
0
        public void Test_AtomArrayArg_Fail()
        {
            var methodInfo = GetMethod(nameof(Dummy_AtomArrayArg));

            ZilObject[] args = { new ZilFix(123) };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            decoder.Decode("dummy", ctx, args);
        }
Ejemplo n.º 13
0
        public void Test_ContextOnly()
        {
            var methodInfo = GetMethod(nameof(Dummy_ContextOnly));

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, new ZilObject[] { });

            object[] expected = { ctx };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 14
0
        public void Test_DeclArg_Pass()
        {
            var methodInfo = GetMethod(nameof(Dummy_DeclArg));

            ZilObject[] args = { ctx.GetStdAtom(StdAtom.ZILF) };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, args[0] };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 15
0
        public void Test_EitherArg_String()
        {
            var methodInfo = GetMethod(nameof(Dummy_IntOrStringOrIntStringArg));

            ZilObject[] args = { ZilString.FromString("hi") };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, "hi" };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 16
0
        public void Test_OptionalArg_EndOfArgs()
        {
            var methodInfo = GetMethod(nameof(Dummy_OptionalIntArg));

            ZilObject[] args = { };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, 69105 };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 17
0
        public void Test_StringArg()
        {
            var methodInfo = GetMethod(nameof(Dummy_StringArgs));

            ZilObject[] args = { ZilString.FromString("hello"), ZilString.FromString("world") };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, "hello", "world" };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 18
0
        public void Test_EitherArg_Optional_Provided()
        {
            var methodInfo = GetMethod(nameof(Dummy_OptionalIntOrStringThenAtomArg));

            ZilObject[] args = { new ZilFix(123), ctx.TRUE };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, 123, ctx.TRUE };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 19
0
        public void Test_DeclArg_OptionalMiddle()
        {
            var methodInfo = GetMethod(nameof(Dummy_MultiOptionalDeclArgs));

            ZilObject[] args = { new ZilFix(2) };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, 1, 2 };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 20
0
        public void Test_IntArg()
        {
            var methodInfo = GetMethod(nameof(Dummy_IntArgs));

            ZilObject[] args = { new ZilFix(123), new ZilFix(456) };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, 123, 456 };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 21
0
        public void Test_ZilObjectArg()
        {
            var methodInfo = GetMethod(nameof(Dummy_ZilObjectArg));

            var arg = new ZilList(null, null);

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, new ZilObject[] { arg });

            object[] expected = { ctx, arg };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 22
0
        public void Test_StructArg_Fail_TooFewArgs()
        {
            var methodInfo = GetMethod(nameof(Dummy_IntStringStructArg));

            ZilObject[] args =
            {
                new ZilList(new ZilObject[] { new ZilFix(123) })
            };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            decoder.Decode("dummy", ctx, args);
        }
Ejemplo n.º 23
0
        public void Test_OptionalArg_Provided()
        {
            var methodInfo = GetMethod(nameof(Dummy_OptionalIntThenStringArg));

            ZilObject[] args = { new ZilFix(42), ZilString.FromString("hello") };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, 42, "hello" };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 24
0
        public void Test_MdlZilRedirect()
        {
            ctx.CurrentFile.Flags |= FileFlags.MdlZil;

            var methodInfo = GetMethod(nameof(Dummy_MdlZilRedirect_From));

            ZilObject[] args = { new ZilFix(123) };

            var del      = ArgDecoder.WrapMethod(methodInfo, ctx);
            var actual   = del("dummy", ctx, args);
            var expected = new ZilFix(246);

            TestHelpers.AssertStructurallyEqual(expected, (ZilObject)actual);
        }
Ejemplo n.º 25
0
        public void Test_SequenceArg()
        {
            var methodInfo = GetMethod(nameof(Dummy_IntStringSequenceArg));

            ZilObject[] args = { new ZilFix(1), ZilString.FromString("money") };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, new IntStringSequence {
                                      arg1 = 1,arg2 = "money"
                                  } };

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 26
0
        public void Test_ZilObjectArrayArg_Empty()
        {
            var methodInfo = GetMethod(nameof(Dummy_ZilObjectArrayArg));

            ZilObject[] args = { };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, args };

            Assert.AreEqual(expected.Length, actual.Length);
            Assert.AreEqual(expected[0], actual[0]);
            Assert.IsInstanceOfType(actual[1], typeof(ZilObject[]));
            TestHelpers.AssertStructurallyEqual((ZilObject[])expected[1], (ZilObject[])actual[1]);
        }
Ejemplo n.º 27
0
        public void Test_IntArrayArg()
        {
            var methodInfo = GetMethod(nameof(Dummy_IntArrayArg));

            ZilObject[] args = { new ZilFix(123), new ZilFix(456) };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, new[] { 123, 456 } };

            Assert.AreEqual(2, actual.Length);
            Assert.AreEqual(expected[0], actual[0]);
            Assert.IsInstanceOfType(actual[1], typeof(int[]));
            CollectionAssert.AreEqual((int[])expected[1], (int[])actual[1]);
        }
Ejemplo n.º 28
0
        public void Test_StringArrayArg()
        {
            var methodInfo = GetMethod(nameof(Dummy_StringArrayArg));

            ZilObject[] args = { ZilString.FromString("hello") };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);
            var actual  = decoder.Decode("dummy", ctx, args);

            object[] expected = { ctx, new[] { "hello" } };

            Assert.AreEqual(2, actual.Length);
            Assert.AreEqual(expected[0], actual[0]);
            Assert.IsInstanceOfType(actual[1], typeof(string[]));
            CollectionAssert.AreEqual((string[])expected[1], (string[])actual[1]);
        }
Ejemplo n.º 29
0
        public void Test_StructArg_Optional_Fail_TooFewArgs()
        {
            var methodInfo = GetMethod(nameof(Dummy_OptionalStructArrayArg));

            ZilObject[] args =
            {
                new ZilVector(
                    new ZilFix(100),
                    new ZilFix(200),
                    new ZilFix(300))
            };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            decoder.Decode("dummy", ctx, args);
        }
Ejemplo n.º 30
0
        public void Test_DeclArg_VarArgs_Fail()
        {
            var methodInfo = GetMethod(nameof(Dummy_DeclVarArgs));

            ZilObject[] args =
            {
                new ZilFix(1),
                new ZilFix(2),
                ZilAtom.Parse("MONEY",ctx),
                ZilAtom.Parse("SHOW", ctx)
            };

            var decoder = ArgDecoder.FromMethodInfo(methodInfo, ctx);

            decoder.Decode("dummy", ctx, args);
        }