Example #1
0
        public static List <LogInfo> Eval(EngineState s, string rawCode, CodeType type, ErrorCheck check, CompatOption compat, out CodeCommand cmd)
        {
            CodeParser parser = new CodeParser(DummySection(), Global.Setting, compat);

            return(Eval(s, parser, rawCode, type, check, compat, out cmd));
        }
Example #2
0
        public static List <LogInfo> Eval(EngineState s, CodeParser parser, string rawCode, CodeType type, ErrorCheck check, CompatOption compat, out CodeCommand cmd)
        {
            // Create CodeCommand
            cmd = parser.ParseStatement(rawCode);
            if (cmd.Type == CodeType.Error)
            {
                CodeInfo_Error info = cmd.Info.Cast <CodeInfo_Error>();
                Console.WriteLine(info.ErrorMessage);

                Assert.AreEqual(ErrorCheck.ParserError, check);
                return(new List <LogInfo>());
            }
            Assert.AreEqual(type, cmd.Type);

            // Run CodeCommand
            s.SetCompat(compat);
            List <LogInfo> logs = Engine.ExecuteCommand(s, cmd);

            s.SetCompat(Project.Compat); // Reset to default

            // Assert
            CheckErrorLogs(logs, check);

            // Return logs
            return(logs);
        }
        private static void WriteSuccessTemplate(EngineState s, CodeType codeType, string rawCode,
                                                 RegistryKey hKey, RegistryValueKind compKind, string keyPath, string valueName, object comp,
                                                 CompatOption opts = null, ErrorCheck check = ErrorCheck.Success)
        {
            if (opts == null)
            {
                EngineTests.Eval(s, rawCode, codeType, check);
            }
            else
            {
                EngineTests.Eval(s, rawCode, codeType, check, opts);
            }

            if (check == ErrorCheck.Success || check == ErrorCheck.Warning || check == ErrorCheck.Overwrite)
            {
                using (RegistryKey subKey = hKey.OpenSubKey(keyPath, false))
                {
                    Assert.IsNotNull(subKey);

                    RegistryValueKind kind = subKey.GetValueKind(valueName);
                    Assert.IsTrue(kind == compKind);

                    object valueData;
                    if (kind == RegistryValueKind.Unknown)
                    {
                        valueData = RegistryHelper.RegGetValue(hKey, keyPath, valueName, RegistryValueKind.Unknown);
                    }
                    else
                    {
                        valueData = subKey.GetValue(valueName, null, RegistryValueOptions.DoNotExpandEnvironmentNames);
                    }
                    Assert.IsNotNull(valueData);

                    switch (kind)
                    {
                    case RegistryValueKind.Unknown:
                    {         // RegWriteEx
                        byte[] destBin = (byte[])valueData;
                        byte[] compBin = (byte[])comp;
                        Assert.IsTrue(destBin.SequenceEqual(compBin));
                    }
                    break;

                    case RegistryValueKind.None:
                        break;

                    case RegistryValueKind.String:
                    case RegistryValueKind.ExpandString:
                    {
                        string destStr = (string)valueData;
                        string compStr = (string)comp;
                        Assert.IsTrue(destStr.Equals(compStr, StringComparison.Ordinal));
                    }
                    break;

                    case RegistryValueKind.MultiString:
                    {
                        string[] destStrs = (string[])valueData;
                        string[] compStrs = (string[])comp;

                        Assert.IsTrue(destStrs.Length == compStrs.Length);
                        for (int i = 0; i < destStrs.Length; i++)
                        {
                            Assert.IsTrue(destStrs[i].Equals(compStrs[i], StringComparison.Ordinal));
                        }
                    }
                    break;

                    case RegistryValueKind.Binary:
                    {
                        byte[] destBin = (byte[])valueData;
                        byte[] compBin = (byte[])comp;
                        Assert.IsTrue(destBin.SequenceEqual(compBin));
                    }
                    break;

                    case RegistryValueKind.DWord:
                    {
                        uint destInt = (uint)(int)valueData;
                        uint compInt = (uint)comp;
                        Assert.IsTrue(destInt == compInt);
                    }
                    break;

                    case RegistryValueKind.QWord:
                    {
                        ulong destInt = (ulong)(long)valueData;
                        ulong compInt = (ulong)comp;
                        Assert.IsTrue(destInt == compInt);
                    }
                    break;

                    default:
                        Assert.Fail();
                        break;
                    }
                }
            }
        }