コード例 #1
0
ファイル: Runner.cs プロジェクト: mrange/hron
        static void ProcessActionLog(
            ReferenceData referenceDataActionLog,
            TestResult testResult,
            TestResultActionLog testResultActionLog
            )
        {
            var config = s_classDescriptor
                .Members
                .Where(m => m.HasPublicGetter && m.MemberType == typeof (TestRunOption))
                .ToDictionary(m => m.Name, m => (TestRunOption)m.Getter(testResult.Configuration))
                ;

            var referenceLines = File.ReadAllLines(referenceDataActionLog.ActionLogPath);
            var resultLines = File.ReadAllLines(testResultActionLog.ActionLogPath);

            var state = new ValidateState (referenceLines, resultLines);

            while (state.HasContent && state.ErrorCount < MaxErrors)
            {
                var matchReferenceLine  = state.Reference.GetMatch();
                var matchResultLine     = state.Result.GetMatch();

                if (!matchReferenceLine.Success)
                {
                    state.Reference.ReportFailure("UnknownTag", "Invalid formatted line", skipLine: true);
                }

                if (!matchResultLine.Success)
                {
                    state.Result.ReportFailure("UnknownTag", "Invalid formatted line", skipLine: true);
                }

                var referenceTag = matchReferenceLine.Groups["tag"].Value;
                var referenceData = matchReferenceLine.Groups["data"].Value;

                var resultTag = matchResultLine.Groups["tag"].Value;
                var resultData = matchResultLine.Groups["data"].Value;

                var isIdentical = IsIdentical(testResult.Configuration, referenceTag, resultTag, referenceData, resultData);

                if (isIdentical)
                {
                    state.ReportAllIsGood(referenceTag);
                    continue;
                }

                var referenceOption = config.Lookup(referenceTag);

                var hasIdenticalTag =
                        referenceTag == resultTag
                    ||  (
                            testResult.Configuration.Equivalence.CommentsAndCommentLines
                            && IsComment(referenceTag)
                            && IsComment(resultTag)
                        );

                switch (referenceOption)
                {
                    case TestRunOption.ValidateExistence:
                        if (hasIdenticalTag)
                        {
                            state.ReportAllIsGood(referenceTag);
                            continue;
                        }
                        else
                        {
                            state.ReportFailure(referenceTag, resultTag, "Validation failure (missing tag)", skipReferenceLine: true, skipResultLine: false);
                            continue;
                        }
                    case TestRunOption.ValidateContent:
                        if (hasIdenticalTag)
                        {
                            if (IsComment(referenceTag))
                            {
                                var referenceCommentContent = GetCommentContent(referenceData);
                                var resultCommentContent = GetCommentContent(resultData);

                                if (referenceCommentContent.Item2 != resultCommentContent.Item2)
                                {
                                    state.ReportFailure(referenceTag, resultTag, "Validation failure (content)", skipReferenceLine: true, skipResultLine: true);
                                }
                                else
                                {
                                    state.ReportAllIsGood(referenceTag);
                                }

                                continue;
                            }
                            else
                            {
                                if (referenceData != resultData)
                                {
                                    state.ReportFailure(referenceTag, resultTag, "Validation failure (content)", skipReferenceLine: true, skipResultLine: true);
                                    continue;
                                }
                                else
                                {
                                    state.ReportAllIsGood(referenceTag);
                                    continue;
                                }
                            }
                        }
                        else
                        {
                            state.ReportFailure(referenceTag, resultTag, "Validation failure (missing tag)", skipReferenceLine: true, skipResultLine: false);
                            continue;
                        }
                    case TestRunOption.Ignore:
                        if (hasIdenticalTag)
                        {
                            state.ReportAllIsGood(referenceTag);
                            continue;
                        }
                        else
                        {
                            state.Reference.ReportAllIsGood(referenceTag);
                            continue;
                        }
                        continue;
                    case TestRunOption.ValidateAll:
                    default:
                        state.ReportFailure(referenceTag, resultTag, "Validation failure (mismatch)", skipReferenceLine: true, skipResultLine:true);
                        continue;
                }
            }
        }
コード例 #2
0
ファイル: Runner.cs プロジェクト: mrange/hron
        static void ProcessTestResult(TestResult testResult, Dictionary<string, ReferenceData> referenceActionLogs)
        {
            Log.Info("Processing test result: {0}", testResult.Name);

            foreach (var testResultActionLog in testResult.ActionLogs)
            {
                Log.Info("Processing test result action log: {0}", testResultActionLog.ActionLogName);
                var referenceDataActionLog = referenceActionLogs
                    .Lookup(testResultActionLog.ActionLogName)
                    ;

                if (referenceDataActionLog == null)
                {
                    Log.Warning("No matching reference action log found: {0}", testResultActionLog.ActionLogName);
                    continue;
                }

                try
                {
                    ProcessActionLog(referenceDataActionLog, testResult, testResultActionLog);
                }
                catch (ExitCodeException)
                {
                    throw;
                }
                catch (Exception exc)
                {
                    Log.Warning("Error while processing result action log: {0}", exc.Message);
                }
            }
        }
コード例 #3
0
ファイル: Runner.cs プロジェクト: mrange/hron
        static TestResult GetTestResult(string testResultPath)
        {
            testResultPath = testResultPath ?? "";

            var result = new TestResult
                             {
                                 Path = testResultPath                      ,
                                 Configuration = new TestRunConfiguration() ,
                             };

            Log.Info ("Processing test result in: {0}", result.Name);

            var configurationFilePath = Path.Combine(testResultPath, ParserValidatorConfig);
            var configurationFileName = Path.GetFileName (configurationFilePath);
            if (File.Exists(configurationFilePath))
            {
                Log.Info("Reading config file: {0}", configurationFileName);
                using (var configStream = new StreamReader(configurationFilePath))
                {
                    dynamic config;
                    HRONDynamicParseError[] errors;
                    var parseResult = HRONSerializer.TryParseDynamic(
                        int.MaxValue,
                        configStream.ReadLines().Select (s => s.ToSubString ()),
                        out config,
                        out errors
                        );

                    if (!parseResult)
                    {
                        Log.Error("Failed to read config file: {0}", configurationFileName);
                        return result;
                    }

                    result.Configuration.Equivalence.EmptyContentLinesAndEmptyLines     = config.Equivalence.EmptyContentLinesAndEmptyLines ;
                    result.Configuration.Equivalence.CommentsAndCommentLines            = config.Equivalence.CommentsAndCommentLines        ;
                    result.Configuration.PreProcessor   = config.PreProcessor   ;
                    result.Configuration.Object_Begin   = config.Object_Begin   ;
                    result.Configuration.Object_End     = config.Object_End     ;
                    result.Configuration.Value_Begin    = config.Value_Begin    ;
                    result.Configuration.Value_End      = config.Value_End      ;
                    result.Configuration.Comment        = config.Comment        ;
                    result.Configuration.Empty          = config.Empty          ;
                    result.Configuration.ContentLine    = config.ContentLine    ;
                    result.Configuration.EmptyLine      = config.EmptyLine      ;
                    result.Configuration.CommentLine    = config.CommentLine    ;
                }
            }

            result.ActionLogs = Directory
                .EnumerateFiles(testResultPath, "*.actionlog")
                .Select(p => new TestResultActionLog {ActionLogPath = p})
                .ToArray()
                ;

            return result;
        }