[vala/wip/valadate: 91/101] added ability to run tests in a given path with -p command line switch
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/valadate: 91/101] added ability to run tests in a given path with -p command line switch
- Date: Sat, 7 Oct 2017 10:57:38 +0000 (UTC)
commit 80b8869c97679134740aa9d9fcf0ac314d04548f
Author: Chris Daley <chebizarro gmail com>
Date: Sun Apr 30 20:04:28 2017 -0700
added ability to run tests in a given path with -p command line switch
tests/.gitignore | 2 +
tests/Makefile.am | 2 +
tests/valatests.vala | 40 ++++++++++++++++++++-----
valadate/taptestreportprinter.vala | 4 ++
valadate/testadapter.vala | 3 +-
valadate/testassembly.vala | 6 ++++
valadate/testconfig.vala | 10 +-----
valadate/testoptions.vala | 58 +++++++++++++----------------------
valadate/testplan.vala | 31 +++++++++++++++++--
valadate/testrunner.vala | 4 +-
10 files changed, 102 insertions(+), 58 deletions(-)
---
diff --git a/tests/.gitignore b/tests/.gitignore
index 53d7587..ba1d9d7 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -4,3 +4,5 @@
*.trs
valadatetests
valactests-*
+README
+gir/bug767718.test
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 87ca400..dea6eea 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -14,6 +14,8 @@ TESTS_ENVIRONMENT += \
CPPFLAGS='$(CPPFLAGS)' \
LDFLAGS='$(LDFLAGS)'
+bin_PROGRAMS = valactests@PACKAGE_SUFFIX@
+
test_programs = valadatetests valactests@PACKAGE_SUFFIX@
# Valadate tests
diff --git a/tests/valatests.vala b/tests/valatests.vala
index 7a90d65..d686eb7 100644
--- a/tests/valatests.vala
+++ b/tests/valatests.vala
@@ -24,10 +24,10 @@ public class Vala.Tests : Valadate.TestSuite {
construct {
try {
var testdir = File.new_for_path (GLib.Environment.get_variable ("G_TEST_BUILDDIR"));
- var testpath = Valadate.TestOptions.get_current_test_path ();
+ var running_test = Environment.get_variable ("V_RUNNING_TEST");
- if (testpath != null) {
- var testpaths = testpath.split ("/");
+ if (running_test != null) {
+ var testpaths = running_test.split ("/");
if (testpaths.length < 4)
return;
var runtest = testdir.get_child (testpaths[3]);
@@ -54,13 +54,33 @@ public class Vala.Tests : Valadate.TestSuite {
while ((file_info = enumerator.next_file ()) != null)
if (file_info.get_file_type () == GLib.FileType.DIRECTORY &&
!file_info.get_name ().has_prefix ("."))
- add_test (new ValaTest (testdir.get_child (file_info.get_name
())));
+ if(in_testpath("/Vala/Tests/%s".printf(file_info.get_name
())))
+ add_test (new ValaTest (testdir.get_child
(file_info.get_name ())));
}
} catch (Error e) {
stderr.printf ("Error: %s\n", e.message);
}
}
+ private static bool in_testpath (string path) {
+ var testpath = Environment.get_variable ("V_TESTPATH");
+ if (testpath == null)
+ return true;
+
+ var paths = path.split ("/");
+ var testpaths = testpath.split ("/");
+
+ for (int i=1; i<int.max (testpaths.length, paths.length); i++) {
+ if (testpaths[i] == null || paths[i] == null)
+ break;
+ if (testpaths[i] == "" || paths[i] == "")
+ break;
+ if (testpaths[i] != paths[i])
+ return false;
+ }
+ return true;
+ }
+
private class ValaTest : Valadate.TestCase {
private TestsFactory factory = TestsFactory.get_instance ();
@@ -70,7 +90,7 @@ public class Vala.Tests : Valadate.TestSuite {
this.label = directory.get_path ();
this.bug_base = BUGZILLA_URL;
- string current_test = Valadate.TestOptions.get_current_test_path ();
+ string current_test = Environment.get_variable ("V_RUNNING_TEST");
if (current_test != null) {
var basename = Path.get_basename (current_test);
@@ -94,12 +114,16 @@ public class Vala.Tests : Valadate.TestSuite {
private void load_test (File testfile) throws Error {
string basename = testfile.get_basename ();
string testname = basename.substring (0, basename.last_index_of ("."));
-
- var adapter = new Valadate.TestAdapter (testname, 1000);
- adapter.label = "/Vala/Tests/%s/%s".printf (
+ string label = "/Vala/Tests/%s/%s".printf (
Path.get_basename (testfile.get_parent ().get_path ()),
testname);
+ if(!in_testpath(label))
+ return;
+
+ var adapter = new Valadate.TestAdapter (testname, 1000);
+ adapter.label = label;
+
adapter.add_test_method (() => {
try {
if (testname.has_prefix ("bug"))
diff --git a/valadate/taptestreportprinter.vala b/valadate/taptestreportprinter.vala
index b0ab993..3d6fa58 100644
--- a/valadate/taptestreportprinter.vala
+++ b/valadate/taptestreportprinter.vala
@@ -31,6 +31,10 @@ internal class Valadate.TapTestReportPrinter : TestReportPrinter {
if (!config.list_only) {
stdout.printf ("TAP version %s\n", TAP_VERSION);
stdout.printf ("# random seed: %s\n", config.seed);
+
+ if (config.testpath != null)
+ stdout.printf ("# running tests in %s\n", config.testpath);
+
}
}
diff --git a/valadate/testadapter.vala b/valadate/testadapter.vala
index d20910a..e88b1cd 100644
--- a/valadate/testadapter.vala
+++ b/valadate/testadapter.vala
@@ -43,7 +43,8 @@ public class Valadate.TestAdapter : Object, Test {
}
}
- private TestCase.TestMethod test;
+ public TestCase.TestMethod test;
+
public Test? parent { get; set; }
public new Test get (int index) {
diff --git a/valadate/testassembly.vala b/valadate/testassembly.vala
index 1819987..718f69a 100644
--- a/valadate/testassembly.vala
+++ b/valadate/testassembly.vala
@@ -30,6 +30,12 @@ public class Valadate.TestAssembly : TestModule {
public TestAssembly (string[] args) throws Error {
base (File.new_for_path (args[0]));
options = new TestOptions (args);
+
+ if (options.testpath != null)
+ Environment.set_variable ("V_TESTPATH", options.testpath, true);
+ if (options.running_test != null)
+ Environment.set_variable ("V_RUNNING_TEST", options.running_test, true);
+
setup_dirs ();
}
diff --git a/valadate/testconfig.vala b/valadate/testconfig.vala
index 054f7c9..34faa13 100644
--- a/valadate/testconfig.vala
+++ b/valadate/testconfig.vala
@@ -49,9 +49,9 @@ public class Valadate.TestConfig {
}
}
- public string[] testpaths {
+ public string? testpath {
get {
- return options.testpaths;
+ return options.testpath;
}
}
@@ -67,12 +67,6 @@ public class Valadate.TestConfig {
}
}
- public virtual bool run_async {
- get {
- return options.run_async;
- }
- }
-
public virtual bool list_only {
get {
return options.list;
diff --git a/valadate/testoptions.vala b/valadate/testoptions.vala
index 48557aa..07d627e 100644
--- a/valadate/testoptions.vala
+++ b/valadate/testoptions.vala
@@ -21,38 +21,25 @@
*/
public class Valadate.TestOptions {
- private static bool _async = true;
private static string _format = "tap";
private static bool _keepgoing = false;
private static bool _list;
- private static bool _quiet;
private static string _runtest = null;
- [CCode (array_length = false, array_null_terminated = true)]
- private static string[] _skip;
private static int _timeout = 60000;
private static string _seed;
private static bool _timed = true;
- private static string _testplan;
- private static bool _verbose;
private static bool _version;
- [CCode (array_length = false, array_null_terminated = true)]
- private static string[] _paths;
+ private static string _path = null;
public const OptionEntry[] options = {
- { "async", 'a', 0, OptionArg.NONE, ref _async, "Run tests asynchronously in a separate
subprocess [Experimental]", null },
{ "format", 'f', 0, OptionArg.STRING, ref _format, "Output test results using format",
"FORMAT" },
{ "", 'k', 0, OptionArg.NONE, ref _keepgoing, "Skip failed tests and continue running", null
},
{ "list", 'l', 0, OptionArg.NONE, ref _list, "List test cases available in a test
executable", null },
- { "quiet", 'q', 0, OptionArg.NONE, ref _quiet, "Run tests quietly", null },
{ "", 'r', 0, OptionArg.STRING, ref _runtest, null, null },
- { "skip", 's', 0, OptionArg.STRING_ARRAY, ref _skip, "Skip all tests matching", "TESTPATH..."
},
{ "timeout", 't', 0, OptionArg.INT, ref _timeout, "Default timeout for tests", "MILLISECONDS"
},
{ "seed", 0, 0, OptionArg.STRING, ref _seed, "Start tests with random seed", "SEEDSTRING" },
- { "timed", 0, 0, OptionArg.NONE, ref _timed, "Run timed tests", null },
- { "testplan", 0, 0, OptionArg.STRING, ref _testplan, "Run the specified TestPlan", "FILE" },
- { "verbose", 0, 0, OptionArg.NONE, ref _verbose, "Run tests verbosely", null },
{ "version", 0, 0, OptionArg.NONE, ref _version, "Display version number", null },
- { "", 0, 0, OptionArg.STRING_ARRAY, ref _paths, "Only start test cases matching",
"TESTPATH..." },
+ { "path", 'p', 0, OptionArg.STRING, ref _path, "Only start test cases matching",
"TESTPATH..." },
{ null }
};
@@ -80,12 +67,6 @@ public class Valadate.TestOptions {
}
}
- public bool run_async {
- get {
- return _async;
- }
- }
-
public bool list {
get {
return _list;
@@ -110,27 +91,32 @@ public class Valadate.TestOptions {
}
}
- public string[] testpaths {
+ public string? testpath {
get {
- return _paths;
+ return _path;
}
}
- public TestOptions (string[] args) throws OptionError {
+ public TestOptions (string[] args) {
_runtest = null;
- opt_context = new OptionContext ("- Valadate Testing Framework");
- opt_context.set_help_enabled (true);
- opt_context.add_main_entries (options, null);
- opt_context.parse (ref args);
-
- if (_seed == null)
- _seed = "R02S%08x%08x%08x%08x".printf (
- GLib.Random.next_int (),
- GLib.Random.next_int (),
- GLib.Random.next_int (),
- GLib.Random.next_int ());
-
+ try {
+ opt_context = new OptionContext ("- Valadate Testing Framework");
+ opt_context.set_help_enabled (true);
+ opt_context.add_main_entries (options, null);
+ opt_context.parse (ref args);
+
+ if (_seed == null)
+ _seed = "R02S%08x%08x%08x%08x".printf (
+ GLib.Random.next_int (),
+ GLib.Random.next_int (),
+ GLib.Random.next_int (),
+ GLib.Random.next_int ());
+
+ } catch (OptionError e) {
+ stdout.printf ("%s\n", e.message);
+ stdout.printf ("Run '%s --help' to see a full list of available command line
options.\n", args[0]);
+ }
}
}
diff --git a/valadate/testplan.vala b/valadate/testplan.vala
index d8dc669..099c7d4 100644
--- a/valadate/testplan.vala
+++ b/valadate/testplan.vala
@@ -114,12 +114,17 @@ public class Valadate.TestPlan : Vala.CodeVisitor {
public override void visit_class (Vala.Class cls) {
+ var label = "/%s".printf (cls.get_full_name ().replace (".","/"));
+
+ if(!in_testpath (label))
+ return;
+
try {
if (is_subtype_of (cls, typeof (TestCase)) && !cls.is_abstract) {
unowned Constructor ctor = get_constructor (cls);
testcase = ctor ();
testcase.name = cls.name;
- testcase.label = "/%s".printf (cls.get_full_name ().replace (".","/"));
+ testcase.label = label;
testsuite.add_test (testcase);
visit_testcase (cls);
@@ -132,6 +137,24 @@ public class Valadate.TestPlan : Vala.CodeVisitor {
cls.accept_children (this);
}
+ private bool in_testpath (string path) {
+ if (config.testpath == null)
+ return true;
+
+ var paths = path.split ("/");
+ var testpaths = config.testpath.split ("/");
+
+ for (int i = 1; i < int.max (testpaths.length, paths.length); i++) {
+ if (testpaths[i] == null || paths[i] == null)
+ break;
+ if (testpaths[i] == "" || paths[i] == "")
+ break;
+ if (testpaths[i] != paths[i])
+ return false;
+ }
+ return true;
+ }
+
private bool is_subtype_of (Vala.Class cls, Type type) {
var t = Type.from_name (cls.get_full_name ().replace (".",""));
if (t.is_a (type))
@@ -156,9 +179,10 @@ public class Valadate.TestPlan : Vala.CodeVisitor {
foreach (var method in cls.get_methods ()) {
+ var currpath = "%s/%s".printf (testcase.label, method.name);
+
if (config.in_subprocess)
- if (options.running_test != "%s/%s".printf (
- testcase.label, method.name))
+ if (options.running_test != currpath)
continue;
if (!is_test (method))
@@ -267,6 +291,7 @@ public class Valadate.TestPlan : Vala.CodeVisitor {
unowned Constructor meth = get_constructor (testclass);
var tsuite = meth () as TestSuite;
tsuite.name = testclass.name;
+ tsuite.label = "/%s".printf (testclass.get_full_name ().replace (".","/"));;
testsuite.add_test (tsuite);
testsuite = tsuite;
}
diff --git a/valadate/testrunner.vala b/valadate/testrunner.vala
index af9968b..3aba022 100644
--- a/valadate/testrunner.vala
+++ b/valadate/testrunner.vala
@@ -104,8 +104,8 @@ public class Valadate.TestRunner {
}
}
- private async void run_async (Test test, TestResult result) throws Error
- requires (plan.config.in_subprocess != true) {
+ private async void run_async (Test test, TestResult result) throws Error {
+
var timeout = plan.config.timeout;
var testprog = plan.assembly.clone ();
if (_n_ongoing_tests > _max_n_ongoing_tests) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]