コード例 #1
0
	static public int RunTests(Type type, string[] args, TestDriverReporter reporter) {
		int failed = 0, ran = 0;
		int result, expected;
		int i, j, iterations;
		string name;
		MethodInfo[] methods;
		bool do_timings = false;
		bool verbose = false;
		bool quiet = false;
		int tms = 0;
		DateTime start, end = DateTime.Now;

		iterations = 1;

		var exclude = new Dictionary<string, string> ();
		List<string> run_only = new List<string> ();
		List<string> exclude_test = new List<string> ();
		if (args != null && args.Length > 0) {
			for (j = 0; j < args.Length;) {
				if (args [j] == "--time") {
					do_timings = !quiet;
					j ++;
				} else if (args [j] == "--iter") {
					iterations = Int32.Parse (args [j + 1]);
					j += 2;
				} else if ((args [j] == "-v") || (args [j] == "--verbose")) {
					verbose = !quiet;
					j += 1;
				} else if ((args [j] == "-q") || (args [j] == "--quiet")) {
					quiet = true;
					verbose = false;
					do_timings = false;
					j += 1;
				} else if (args [j] == "--exclude") {
					exclude [args [j + 1]] = args [j + 1];
					j += 2;
				} else if (args [j] == "--exclude-test") {
					exclude_test.Add (args [j + 1]);
					j += 2;
				} else if (args [j] == "--run-only") {
					run_only.Add (args [j + 1]);
					j += 2;
				} else {
					Console.WriteLine ("Unknown argument: " + args [j]);
					return 1;
				}
			}
		}
		int nskipped = 0;
		methods = type.GetMethods (BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static);
		for (int iter = 0; iter < iterations; ++iter) {
			for (i = 0; i < methods.Length; ++i) {
				name = methods [i].Name;
				if (!name.StartsWith ("test_", StringComparison.Ordinal))
					continue;
				if (run_only.Count > 0) {
					bool found = false;
					for (j = 0; j < run_only.Count; j++) {
						if (name.EndsWith (run_only [j])) {
							found = true;
							break;
						}
					}
					if (!found)
						continue;
				}
				if (exclude.Count > 0 || exclude_test.Count > 0) {
					var attrs = methods [i].GetCustomAttributes (typeof (CategoryAttribute), false);
					bool skip = false;
					for (j = 0; j < exclude_test.Count; j++) {
						if (name.EndsWith (exclude_test [j])) {
							skip = true;
							break;
						}
					}
					foreach (CategoryAttribute attr in attrs) {
						if (exclude.ContainsKey (attr.Category))
							skip = true;
					}
					if (skip) {
						if (verbose)
							Console.WriteLine ("Skipping '{0}'.", name);
						nskipped ++;
						continue;
					}
				}
				for (j = 5; j < name.Length; ++j)
					if (!Char.IsDigit (name [j]))
						break;
				if (verbose)
					Console.WriteLine ("Running '{0}' ...", name);
				expected = Int32.Parse (name.Substring (5, j - 5));
				start = DateTime.Now;
				result = (int)methods [i].Invoke (null, null);
				if (do_timings) {
					end = DateTime.Now;
					long tdiff = end.Ticks - start.Ticks;
					int mdiff = (int)tdiff/10000;
					tms += mdiff;
					Console.WriteLine ("{0} took {1} ms", name, mdiff);
				}
				ran++;
				if (result != expected) {
					failed++;
					Console.WriteLine ("{0} failed: got {1}, expected {2}", name, result, expected);
				}
			}
		
			if (!quiet) {
				if (do_timings) {
					Console.WriteLine ("Total ms: {0}", tms);
				}
				if (nskipped > 0)
					Console.WriteLine ("Regression tests: {0} ran, {1} skipped, {2} failed in {3}", ran, nskipped, failed, type);
				else
					Console.WriteLine ("Regression tests: {0} ran, {1} failed in {2}", ran, failed, type);
			}
		}

		if (reporter != null) {
			reporter.ReportResults (ran, nskipped, failed);
		}

		//Console.WriteLine ("Regression tests: {0} ran, {1} failed in [{2}]{3}", ran, failed, type.Assembly.GetName().Name, type);
		return failed;
	}
コード例 #2
0
    static public int RunTests(Type type, string[] args, TestDriverReporter reporter)
    {
        int    failed = 0, ran = 0;
        int    result, expected;
        int    i, j, iterations;
        string name;

        MethodInfo[] methods;
        bool         do_timings = false;
        bool         verbose = false;
        bool         quiet = false;
        int          tms = 0;
        DateTime     start, end = DateTime.Now;

        iterations = 1;

        var           exclude      = new Dictionary <string, string> ();
        List <string> run_only     = new List <string> ();
        List <string> exclude_test = new List <string> ();

        if (args != null && args.Length > 0)
        {
            for (j = 0; j < args.Length;)
            {
                if (args [j] == "--time")
                {
                    do_timings = !quiet;
                    j++;
                }
                else if (args [j] == "--iter")
                {
                    iterations = Int32.Parse(args [j + 1]);
                    j         += 2;
                }
                else if ((args [j] == "-v") || (args [j] == "--verbose"))
                {
                    verbose = !quiet;
                    j      += 1;
                }
                else if ((args [j] == "-q") || (args [j] == "--quiet"))
                {
                    quiet      = true;
                    verbose    = false;
                    do_timings = false;
                    j         += 1;
                }
                else if (args [j] == "--exclude")
                {
                    exclude [args [j + 1]] = args [j + 1];
                    j += 2;
                }
                else if (args [j] == "--exclude-test")
                {
                    exclude_test.Add(args [j + 1]);
                    j += 2;
                }
                else if (args [j] == "--run-only")
                {
                    run_only.Add(args [j + 1]);
                    j += 2;
                }
                else
                {
                    Console.WriteLine("Unknown argument: " + args [j]);
                    return(1);
                }
            }
        }
        int nskipped = 0;

        methods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
        for (int iter = 0; iter < iterations; ++iter)
        {
            for (i = 0; i < methods.Length; ++i)
            {
                name = methods [i].Name;
                if (!name.StartsWith("test_", StringComparison.Ordinal))
                {
                    continue;
                }
                if (run_only.Count > 0)
                {
                    bool found = false;
                    for (j = 0; j < run_only.Count; j++)
                    {
                        if (name.EndsWith(run_only [j]))
                        {
                            found = true;
                            break;
                        }
                    }
                    if (!found)
                    {
                        continue;
                    }
                }
                if (exclude.Count > 0 || exclude_test.Count > 0)
                {
                    var  attrs = methods [i].GetCustomAttributes(typeof(CategoryAttribute), false);
                    bool skip  = false;
                    for (j = 0; j < exclude_test.Count; j++)
                    {
                        if (name.EndsWith(exclude_test [j]))
                        {
                            skip = true;
                            break;
                        }
                    }
                    foreach (CategoryAttribute attr in attrs)
                    {
                        if (exclude.ContainsKey(attr.Category))
                        {
                            skip = true;
                        }
                    }
                    if (skip)
                    {
                        if (verbose)
                        {
                            Console.WriteLine("Skipping '{0}'.", name);
                        }
                        nskipped++;
                        continue;
                    }
                }
                for (j = 5; j < name.Length; ++j)
                {
                    if (!Char.IsDigit(name [j]))
                    {
                        break;
                    }
                }
                if (verbose)
                {
                    Console.WriteLine("Running '{0}' ...", name);
                }
                expected = Int32.Parse(name.Substring(5, j - 5));
                start    = DateTime.Now;
                result   = (int)methods [i].Invoke(null, null);
                if (do_timings)
                {
                    end = DateTime.Now;
                    long tdiff = end.Ticks - start.Ticks;
                    int  mdiff = (int)tdiff / 10000;
                    tms += mdiff;
                    Console.WriteLine("{0} took {1} ms", name, mdiff);
                }
                ran++;
                if (result != expected)
                {
                    failed++;
                    Console.WriteLine("{0} failed: got {1}, expected {2}", name, result, expected);
                }
            }

            if (!quiet)
            {
                if (do_timings)
                {
                    Console.WriteLine("Total ms: {0}", tms);
                }
                if (nskipped > 0)
                {
                    Console.WriteLine("Regression tests: {0} ran, {1} skipped, {2} failed in {3}", ran, nskipped, failed, type);
                }
                else
                {
                    Console.WriteLine("Regression tests: {0} ran, {1} failed in {2}", ran, failed, type);
                }
            }
        }

        if (reporter != null)
        {
            reporter.ReportResults(ran, nskipped, failed);
        }

        //Console.WriteLine ("Regression tests: {0} ran, {1} failed in [{2}]{3}", ran, failed, type.Assembly.GetName().Name, type);
        return(failed);
    }