You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.IO;
 | |
| using System.Xml;
 | |
| using Commons.Xml.Relaxng;
 | |
| using Commons.Xml.Relaxng.Derivative;
 | |
| 
 | |
| public class Test
 | |
| {
 | |
| 	static char SEP = Path.DirectorySeparatorChar;
 | |
| 	static bool skip_error = true;
 | |
| 
 | |
| 	public static void Main (string [] args)
 | |
| 	{
 | |
| 		if (args.Length > 0 && args [0] == "--skip-error")
 | |
| 			skip_error = true;
 | |
| 
 | |
| Console.WriteLine ("Started:  " + DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss.fff"));
 | |
| 		RunTest ();
 | |
| Console.WriteLine ("Finished: " + DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss.fff"));
 | |
| 	}
 | |
| 
 | |
| 	static void RunTest ()
 | |
| 	{
 | |
| 		foreach (DirectoryInfo di in new DirectoryInfo (@"relax-ng").GetDirectories ()) {
 | |
| 			XmlTextReader xtr = null;
 | |
| 			FileInfo fi = new FileInfo (di.FullName + "/i.rng");
 | |
| 			// Invalid grammar case:
 | |
| 			if (fi.Exists) {
 | |
| 				xtr = new XmlTextReader (fi.FullName);
 | |
| 				try {
 | |
| 					RelaxngPattern.Read (xtr).Compile ();
 | |
| 					Console.WriteLine ("Expected error: " + di.Name);
 | |
| 				} catch (RelaxngException ex) {
 | |
| 				} catch (XmlException ex) {
 | |
| 				} catch (ArgumentNullException ex) {
 | |
| 				} catch (UriFormatException ex) {
 | |
| 				} catch (Exception ex) {
 | |
| 					Console.WriteLine ("Unexpected error type : " + di.Name + " : " + ex.Message);
 | |
| 				} finally {
 | |
| 					xtr.Close ();
 | |
| 				}
 | |
| 				continue;
 | |
| 			}
 | |
| 
 | |
| 			// Valid grammar case:
 | |
| 			xtr = new XmlTextReader (di.FullName + "/c.rng");
 | |
| 			RelaxngPattern p = null;
 | |
| 			try {
 | |
| 				p = RelaxngPattern.Read (xtr);
 | |
| 				p.Compile ();
 | |
| 				} catch (Exception ex) {
 | |
| 					Console.WriteLine ("Invalidated grammar: " + di.Name + " : " + ex.Message);
 | |
| 					continue;
 | |
| 			} finally {
 | |
| 				xtr.Close ();
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			// Instance validation
 | |
| 			foreach (FileInfo inst in di.GetFiles ("*.xml")) {
 | |
| 				try {
 | |
| 					RelaxngValidatingReader vr = new RelaxngValidatingReader (new XmlTextReader (inst.FullName), p);
 | |
| 					if (skip_error)
 | |
| 						vr.InvalidNodeFound += RelaxngValidatingReader.IgnoreError;
 | |
| 					while (!vr.EOF)
 | |
| 						vr.Read ();
 | |
| 					if (inst.Name.IndexOf ("i.") >= 0 && !skip_error)
 | |
| 						Console.WriteLine ("Incorrectly validated instance: " + di.Name + "/" + inst.Name);
 | |
| 				} catch (RelaxngException ex) {
 | |
| 					string path = di.Name + "/" + inst.Name;
 | |
| 					if (skip_error)
 | |
| 						Console.WriteLine ("Failed to skip error : " + path + ex.Message);
 | |
| 					if (inst.Name.IndexOf ("i.") >= 0)
 | |
| 						continue;
 | |
| 					Console.WriteLine ("Invalidated instance: " + path + " : " + ex.Message);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 |