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]; }
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(); } } }
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]); } }
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(); } } }