Esempio n. 1
0
        public ITestResult[] Test()
        {
            if (Ruleset != null)
            {
                List<ITestResult> results = new List<ITestResult>();
                foreach (IValidationRule rule in Ruleset.Rules)
                {
                    foreach (ITest test in rule.Tests)
                    {
                        RulesetValidator validator = new RulesetValidator(Ruleset, test.iCalendarText);

                        List<IValidationResult> validationResults = new List<IValidationResult>();
                        validationResults.AddRange(validator.Validate());

                        TestResult result = new TestResult(rule.Name, test, false);
                        if (test.Type == TestType.Fail)
                        {
                            List<IValidationResult> badResults = validationResults.FindAll(
                                delegate(IValidationResult r)
                                {
                                    return !BoolUtil.IsTrue(r.Passed);
                                });

                            // On a failing test, there should always be bad results.
                            if (badResults.Count > 0)
                            {
                                // Get a list of errors from our results
                                List<IValidationError> errors = new List<IValidationError>();
                                foreach (IValidationResult r in badResults)
                                {
                                    // 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).
                                    bool fatal = false;
                                    foreach (IValidationError error in r.Errors)
                                    {
                                        errors.Add(error);
                                        if (error.IsFatal)
                                        {
                                            fatal = true;
                                            break;
                                        }
                                    }

                                    if (fatal)
                                        break;
                                }

                                if (errors.Count == 1 && !string.Equals(errors[0].Name, test.ExpectedError))
                                    result.Error = new TestError("failWithIncorrectError", rule.Name, validationResults.ToArray());
                                else if (errors.Count == 0)
                                    result.Error = new TestError("failExpectedError", rule.Name, validationResults.ToArray());
                                else if (errors.Count > 1)
                                    result.Error = new TestError("failWithMoreThanOneError", rule.Name, validationResults.ToArray());
                                else
                                    result.Passed = true;
                            }
                        }
                        else 
                        {
                            result.Passed = true;
                            if (validationResults.FindIndex(
                                delegate(IValidationResult r)
                                {
                                    return !BoolUtil.IsTrue(r.Passed);
                                }) >= 0)
                            {
                                result.Passed = false;
                                result.Error = new TestError("passExpectedError", rule.Name, validationResults.ToArray());
                            }
                        }

                        results.Add(result);
                    }
                }

                return results.ToArray();
            }
            // FIXME: else throw exception?
            else return new ITestResult[0];            
        }
Esempio n. 2
0
        static void ValidateFile(IXmlDocumentProvider docProvider, IValidationRuleset selectedRuleset)
        {
            IValidationSerializer serializer = GetSerializer(docProvider);
            bool needsMoreArguments = false;

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

                    if (_Arguments.Contains(_FileArgument))
                    {
                        // Load the calendar from a local file
                        Console.Write(ResourceManager.GetString("loadingCalendar"));
                        FileStream fs = new FileStream(_Arguments[_FileArgument].Value, FileMode.Open, FileAccess.Read);
                        if (fs != null)
                        {
                            StreamReader sr = new StreamReader(fs);
                            iCalText = sr.ReadToEnd();
                            sr.Close();
                        }
                        Console.WriteLine(ResourceManager.GetString("Done"));
                    }
                    else if (_Arguments.Contains(_UriArgument))
                    {
                        // Load the calendar from a Uri
                        Console.Write(ResourceManager.GetString("loadingCalendar"));
                        Uri uri = new Uri(_Arguments[_UriArgument].Value);
                        string
                            username = null,
                            password = null;

                        if (_Arguments.Contains(_UsernameArgument))
                        {
                            username = _Arguments[_UsernameArgument].Value;
                            if (_Arguments.Contains(_PasswordArgument))
                                password = _Arguments[_PasswordArgument].Value;
                        }

                        WebClient client = new WebClient();
                        if (username != null && password != null)
                            client.Credentials = new System.Net.NetworkCredential(username, password);

                        iCalText = client.DownloadString(uri);
                        Console.WriteLine(ResourceManager.GetString("Done"));
                    }
                    else
                    {
                        needsMoreArguments = true;
                    }

                    if (needsMoreArguments)
                    {
                        WriteDescription();
                    }
                    else
                    {
                        if (iCalText == null)
                        {
                            throw new Exception(ResourceManager.GetString("calendarNotFound"));
                        }
                        else
                        {
                            RulesetValidator rulesetValidator = new RulesetValidator(selectedRuleset, iCalText);

                            if (rulesetValidator != null)
                            {
                                Console.Write(string.Format(
                                    ResourceManager.GetString("validatingCalendar"),
                                    ResourceManager.GetString(selectedRuleset.NameString)
                                ));

                                serializer.ValidationResults = rulesetValidator.Validate();

                                Console.WriteLine(ResourceManager.GetString("done"));
                            }
                        }
                    }
                }

                Stream stream;
                Encoding encoding;
                SetupStream(serializer, out stream, out encoding);

                try
                {
                    serializer.Serialize(stream, encoding);
                }
                finally
                {
                    stream.Close();
                }
            }
        }
Esempio n. 3
0
        public ITestResult[] Test()
        {
            if (Ruleset != null)
            {
                List <ITestResult> results = new List <ITestResult>();
                foreach (IValidationRule rule in Ruleset.Rules)
                {
                    foreach (ITest test in rule.Tests)
                    {
                        RulesetValidator validator = new RulesetValidator(Ruleset, test.iCalendarText);

                        List <IValidationResult> validationResults = new List <IValidationResult>();
                        validationResults.AddRange(validator.Validate());

                        TestResult result = new TestResult(rule.Name, test, false);
                        if (test.Type == TestType.Fail)
                        {
                            List <IValidationResult> badResults = validationResults.FindAll(
                                delegate(IValidationResult r)
                            {
                                return(!BoolUtil.IsTrue(r.Passed));
                            });

                            // On a failing test, there should always be bad results.
                            if (badResults.Count > 0)
                            {
                                // Get a list of errors from our results
                                List <IValidationError> errors = new List <IValidationError>();
                                foreach (IValidationResult r in badResults)
                                {
                                    // 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).
                                    bool fatal = false;
                                    foreach (IValidationError error in r.Errors)
                                    {
                                        errors.Add(error);
                                        if (error.IsFatal)
                                        {
                                            fatal = true;
                                            break;
                                        }
                                    }

                                    if (fatal)
                                    {
                                        break;
                                    }
                                }

                                if (errors.Count == 1 && !string.Equals(errors[0].Name, test.ExpectedError))
                                {
                                    result.Error = new TestError("failWithIncorrectError", rule.Name, validationResults.ToArray());
                                }
                                else if (errors.Count == 0)
                                {
                                    result.Error = new TestError("failExpectedError", rule.Name, validationResults.ToArray());
                                }
                                else if (errors.Count > 1)
                                {
                                    result.Error = new TestError("failWithMoreThanOneError", rule.Name, validationResults.ToArray());
                                }
                                else
                                {
                                    result.Passed = true;
                                }
                            }
                        }
                        else
                        {
                            result.Passed = true;
                            if (validationResults.FindIndex(
                                    delegate(IValidationResult r)
                            {
                                return(!BoolUtil.IsTrue(r.Passed));
                            }) >= 0)
                            {
                                result.Passed = false;
                                result.Error  = new TestError("passExpectedError", rule.Name, validationResults.ToArray());
                            }
                        }

                        results.Add(result);
                    }
                }

                return(results.ToArray());
            }
            // FIXME: else throw exception?
            else
            {
                return(new ITestResult[0]);
            }
        }
Esempio n. 4
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;

                    RulesetValidator validator = new RulesetValidator(selectedRuleset);

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

                    serializer.TestResults = validator.Test();

                    Console.WriteLine(ResourceManager.GetString("done"));
                }

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