DDay.iCal.Validator.RFC5545.RulesetValidator.Test C# (CSharp) Method

Test() public method

public Test ( ) : ITestResult[]
return ITestResult[]
        public ITestResult[] Test()
        {
            if (Ruleset != null)
            {
                List<ITestResult> results = new List<ITestResult>();

                int testsToRun = 0;
                foreach (IValidationRule rule in Ruleset.Rules)
                {
                    if (rule.Tests != null)
                        testsToRun += rule.Tests.Length;
                }

                OnTestStart(testsToRun);

                bool validatorsVerified = false;
                foreach (IValidationRule rule in Ruleset.Rules)
                {
                    if (rule.Tests != null)
                    {
                        foreach (ITest test in rule.Tests)
                        {
                            Debug.WriteLineWithTimestamp("Loading validators for test...");

                            // Load the ruleset validator using the test data.
                            RulesetValidator validator = new RulesetValidator(ResourceManager, Ruleset, test.iCalendarText, !validatorsVerified);
                            validatorsVerified = true;

                            Debug.WriteLineWithTimestamp("Done.");

                            // Validate the calendar!
                            IValidationResultCollection validationResults = validator.Validate();
                            TestResult result = new TestResult(ResourceManager, rule.Name, test, false);

                            Debug.WriteLineWithTimestamp("Interpreting test results...");

                            // Interpret the results...
                            if (test.Type == TestType.Fail)
                            {
                                if (BoolUtil.IsTrue(validationResults.Passed))
                                {
                                    // The validation passed, but the test expected it to fail.
                                    TestError error = new TestError(ResourceManager, "failExpectedError", rule.Name, validationResults);
                                    error.Message = string.Format(error.Message, test.ExpectedError);
                                    result.Error = error;
                                }
                                else
                                {
                                    IValidationResultInfo[] details = validationResults.Details;
                                    if (details.Length == 1 && !string.Equals(details[0].Name, test.ExpectedError))
                                    {
                                        // Validation failed (as expected), however, it failed with the incorrect error.
                                        TestError error = new TestError(ResourceManager, "failWithIncorrectError", rule.Name, validationResults);
                                        error.Message = string.Format(error.Message, details[0].Name, test.ExpectedError);
                                        result.Error = error;
                                    }
                                    else if (details.Length > 1)
                                    {
                                        // Validation failed (as expected), however, it failed with more than one error.
                                        TestError error = new TestError(ResourceManager, "failWithMoreThanOneError", rule.Name, validationResults);
                                        error.Message = string.Format(error.Message, test.ExpectedError);
                                        result.Error = error;
                                    }
                                    else
                                    {
                                        // The test passed, meaning the result was exactly as expected.
                                        result.Passed = true;
                                    }
                                }
                            }
                            else
                            {
                                if (BoolUtil.IsTrue(validationResults.Passed))
                                {
                                    // The test passed, meaning the result was exactly as expected.
                                    result.Passed = true;
                                }
                                else
                                {
                                    // The validation was expected to succeed, but one or more errors occurred.
                                    result.Passed = false;
                                    result.Error = new TestError(ResourceManager, "passExpectedError", rule.Name, validationResults);
                                }
                            }

                            Debug.WriteLineWithTimestamp("Done.");

                            // Notify via event the result of the test.
                            if (result.Passed == null)
                                OnTestNotRun(result);
                            else if (BoolUtil.IsTrue(result.Passed))
                                OnTestPassed(result);
                            else
                                OnTestFailed(result);

                            results.Add(result);

                            // If we encounter a fatal error, then we cannot continue processing
                            // other errors. In other words, even though a single error was caused,
                            // the fact that it was fatal may have side effects and cause errors
                            // in almost every validator (i.e. a calendar with parsing errors).
                            if (validationResults.IsFatal)
                                break;
                        }
                    }
                }

                return results.ToArray();
            }
            // FIXME: else throw exception?
            else return new ITestResult[0];
        }

Usage Example

Example #1
0
        static void SelfTest(IXmlDocumentProvider docProvider, IValidationRuleset selectedRuleset)
        {
            IValidationSerializer serializer = GetSerializer(docProvider);
            if (serializer != null)
            {
                Stream stream;
                Encoding encoding;
                SetupStream(serializer, out stream, out encoding);

                if (selectedRuleset != null)
                {
                    serializer.Ruleset = selectedRuleset;

                    Console.WriteLine(string.Format(
                        ResourceManager.GetString("performingSelfTest"),
                        ResourceManager.GetString(selectedRuleset.NameString))
                    );

                    RulesetValidator validator = new RulesetValidator(ResourceManager, selectedRuleset);
                    validator.TestProgress +=
                        delegate(object sender, TestProgressEventArgs e)
                        {
                            Console.CursorLeft = 0;
                            Console.Write(
                                string.Format(
                                    ResourceManager.GetString("testProgress"),
                                    e.Passed + e.Failed + e.NotRun,
                                    e.TotalTests
                                )
                            );
                        };

                    serializer.TestResults = validator.Test();
                }

                try
                {
                    serializer.Serialize(stream, encoding, permalink:"");
                }
                finally
                {
                    stream.Close();
                }

                // Open the output file, if requested
                OpenOutputFile(serializer);
            }
        }