示例#1
0
        public void PackTest5()
        {
            object data = (object)new object[] { 1.4, 1.4f, 1.4d, -1.4, -1.4f, -1.4d };

            IPM pm = new PM(string.Format("left({0})", Value.Pack(data)));

            RArgs args = (RArgs)pm.Levels[0].Args[0].data;

            Assert.Equal(6, args.Length);

            Assert.Equal(ArgumentType.Double, args[0].type);
            Assert.Equal(1.4d, args[0].data);

            Assert.Equal(ArgumentType.Float, args[1].type);
            Assert.Equal(1.4f, args[1].data);

            Assert.Equal(ArgumentType.Double, args[2].type);
            Assert.Equal(1.4d, args[2].data);

            Assert.Equal(ArgumentType.Double, args[3].type);
            Assert.Equal(-1.4d, args[3].data);

            Assert.Equal(ArgumentType.Float, args[4].type);
            Assert.Equal(-1.4f, args[4].data);

            Assert.Equal(ArgumentType.Double, args[5].type);
            Assert.Equal(-1.4d, args[5].data);
        }
示例#2
0
        public void DetectArgumentTest3()
        {
            IPM pm = new PM(" m77(\"guid\", 12, {\"p1\", {4, \"test\", 8, 'y'}, true}, {false, 'p2'}) ");

            Assert.True(pm.Is(LevelType.Method, "m77"));

            var args = pm.Levels[0].Args;

            Assert.Equal(4, args.Length);

            Assert.Equal(ArgumentType.StringDouble, args[0].type);
            Assert.Equal("guid", args[0].data);

            Assert.Equal(ArgumentType.Integer, args[1].type);
            Assert.Equal(12, args[1].data);

            Assert.Equal(ArgumentType.Object, args[2].type);
            {
                RArgs args2 = (RArgs)args[2].data;
                Assert.Equal(3, args2.Length);

                Assert.Equal(ArgumentType.StringDouble, args2[0].type);
                Assert.Equal("p1", args2[0].data);

                Assert.Equal(ArgumentType.Object, args2[1].type);
                {
                    RArgs args21 = (RArgs)args2[1].data;
                    Assert.Equal(4, args21.Length);

                    Assert.Equal(ArgumentType.Integer, args21[0].type);
                    Assert.Equal(4, args21[0].data);

                    Assert.Equal(ArgumentType.StringDouble, args21[1].type);
                    Assert.Equal("test", args21[1].data);

                    Assert.Equal(ArgumentType.Integer, args21[2].type);
                    Assert.Equal(8, args21[2].data);

                    Assert.Equal(ArgumentType.Char, args21[3].type);
                    Assert.Equal('y', args21[3].data);
                }

                Assert.Equal(ArgumentType.Boolean, args2[2].type);
                Assert.Equal(true, args2[2].data);
            }

            Assert.Equal(ArgumentType.Object, args[3].type);
            {
                RArgs args3 = (RArgs)args[3].data;
                Assert.Equal(2, args3.Length);

                Assert.Equal(ArgumentType.Boolean, args3[0].type);
                Assert.Equal(false, args3[0].data);

                Assert.Equal(ArgumentType.StringSingle, args3[1].type);
                Assert.Equal("p2", args3[1].data);
            }
        }
示例#3
0
        public void PackTest4()
        {
            object data = new object[] { "str", 123, -1.4, true, 'n', new object[] { 1.2f, "str2", 'y', false }, -24.574 };

            IPM pm = new PM(string.Format("left({0})", Value.Pack(data)));

            var raw = pm.Levels[0].Args;

            Assert.Single(raw);

            Assert.Equal(ArgumentType.Object, raw[0].type);
            {
                RArgs args = (RArgs)raw[0].data;
                Assert.Equal(7, args.Length);

                Assert.Equal(ArgumentType.StringDouble, args[0].type);
                Assert.Equal("str", args[0].data);

                Assert.Equal(ArgumentType.Integer, args[1].type);
                Assert.Equal(123, args[1].data);

                Assert.Equal(ArgumentType.Double, args[2].type);
                Assert.Equal(-1.4, args[2].data);

                Assert.Equal(ArgumentType.Boolean, args[3].type);
                Assert.Equal(true, args[3].data);

                Assert.Equal(ArgumentType.Char, args[4].type);
                Assert.Equal('n', args[4].data);

                Assert.Equal(ArgumentType.Object, args[5].type);
                {
                    RArgs args5 = (RArgs)args[5].data;
                    Assert.Equal(4, args5.Length);

                    Assert.Equal(ArgumentType.Float, args5[0].type);
                    Assert.Equal(1.2f, args5[0].data);

                    Assert.Equal(ArgumentType.StringDouble, args5[1].type);
                    Assert.Equal("str2", args5[1].data);

                    Assert.Equal(ArgumentType.Char, args5[2].type);
                    Assert.Equal('y', args5[2].data);

                    Assert.Equal(ArgumentType.Boolean, args5[3].type);
                    Assert.Equal(false, args5[3].data);
                }

                Assert.Equal(ArgumentType.Double, args[6].type);
                Assert.Equal(-24.574, args[6].data);
            }
        }
示例#4
0
        protected string CopyFile(IPM pm, RArgs files, string dest, bool overwrite, RArgs except = null)
        {
            dest = dest.DirectoryPathFormat();

            foreach (Argument src in files)
            {
                if (src.type != ArgumentType.StringDouble)
                {
                    throw new PMArgException(src, "Input files. Define as {\"f1\", \"f2\", ...}");
                }
                CopyFile(pm, src.data.ToString(), dest, overwrite, except);
            }

            return(Value.Empty);
        }
示例#5
0
        protected string DeleteFiles(IPM pm, RArgs files, RArgs except = null)
        {
            if (files.Any(p => p.type != ArgumentType.StringDouble))
            {
                throw new PMArgException(files, "Input files. Define as {\"f1\", \"f2\", ...}");
            }

            if (except != null && except.Any(p => p.type != ArgumentType.StringDouble))
            {
                throw new PMArgException(except, "'except' argument. Define as {\"f1\", \"f2\", ...}");
            }

            string exs(string file, int idx)
            {
                if (!string.IsNullOrWhiteSpace(file))
                {
                    return(GetLocation(file));
                }
                throw new ArgumentException($"File name is empty. Fail in '{idx}' position.");
            }

            string[] input = files.Select((f, i) => exs((string)f.data, i)).ToArray().ExtractFiles(Exer.BasePath);
#if DEBUG
            LSender.Send(this, $"DeleteFiles: Found files `{string.Join(", ", input)}`", MsgLevel.Trace);
#endif
            if (except != null)
            {
                input = input.Except
                        (
                    except
                    .Where(f => !string.IsNullOrWhiteSpace((string)f.data))
                    .Select(f => GetLocation((string)f.data))
                    .ToArray()
                    .ExtractFiles(Exer.BasePath)
                        )
                        .ToArray();
            }

            if (input.Length < 1)
            {
                throw new PMArgException(files, "Input files was not found. Check your mask and the exception list if used.");
            }

            DeleteFiles(input);
            return(Value.Empty);
        }
示例#6
0
        protected static string GetMessage(RArgs args, string expected)
        {
            string pNull, pSize;

            if (args == null)
            {
                pNull = "null";
                pSize = "";
            }
            else
            {
                pNull = "not null";
                pSize = " with size " + args.Count;
            }

            return($"Incorrect arguments: {pNull} value{pSize}. Expected `{expected}`");
        }
示例#7
0
文件: Value.cs 项目: 3F/SobaScript
        /// <summary>
        /// Extract SNode.RArguments into system object[] data.
        /// </summary>
        /// <param name="args">SNode arguments.</param>
        /// <returns></returns>
        public static object[] Extract(RArgs args)
        {
            object[] ret = new object[args.Length];
            for (int i = 0; i < args.Length; ++i)
            {
                if (args[i].data is RArgs)
                {
                    ret[i] = Extract((RArgs)args[i].data);
                    continue;
                }
                ret[i] = args[i].data;
#if DEBUG
                LSender.Send(typeof(Value), $"Value.extract: SNode.Argument - '{ret[i]}'", MsgLevel.Trace);
#endif
            }
            return(ret);
        }
示例#8
0
        protected string DoCatch(string cmd, Exception ex, RArgs args)
        {
            LSender.Send(this, $"Catched error `{ex.Message}`", MsgLevel.Info);

            if (args == null)
            {
                return(Evaluate(cmd));
            }

            if (args.Count == 2 &&
                args[0].type == ArgumentType.EnumOrConst &&
                args[1].type == ArgumentType.EnumOrConst)
            {
                // try{ }catch(err, msg){ }
                return(DoCatch(cmd, ex, args[0].data.ToString(), args[1].data.ToString()));
            }

            throw new NotSupportedOperationException("the format of the catch block is incorrect or not supported yet.");
        }
示例#9
0
        protected string CopyFile(IPM pm, string src, string dest, bool overwrite, RArgs except = null)
        {
            if (string.IsNullOrWhiteSpace(src) || string.IsNullOrWhiteSpace(dest))
            {
                throw new ArgumentException("The source file or the destination path argument is empty.");
            }

            if (except != null && except.Any(p => p.type != ArgumentType.StringDouble))
            {
                throw new PMArgException(except, "'except' argument. Define as {\"f1\", \"f2\", ...}");
            }

            dest = GetLocation(dest.TrimEnd());
            string destDir  = Path.GetDirectoryName(dest);
            string destFile = Path.GetFileName(dest);

            src = GetLocation(src);
            string[] input = new[] { src }.ExtractFiles(Exer.BasePath);
#if DEBUG
            LSender.Send(this, $"Found files to copy `{string.Join(", ", input)}`", MsgLevel.Trace);
#endif
            if (except != null)
            {
                string path = Path.GetDirectoryName(src);
                input = input.Except
                        (
                    except
                    .Where(f => !string.IsNullOrWhiteSpace((string)f.data))
                    .Select(f => GetLocation((string)f.data, path))
                    .ToArray()
                    .ExtractFiles(Exer.BasePath)
                        )
                        .ToArray();
            }

            if (input.Length < 1)
            {
                throw new ArgumentException("The input files was not found. Check your mask and the exception list if used.");
            }

            CopyFile(destDir, destFile, overwrite, input);
            return(Value.Empty);
        }
示例#10
0
 public PMArgException(RArgs args, string expected)
     : base(GetMessage(args, expected), args)
 {
 }