summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Istrate <daniel.alexandrux.istrate@intel.com>2016-03-18 15:18:09 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-03-20 23:12:29 +0000
commitee4f61b7e14a108d26eadc5e5b285e8d99c94545 (patch)
treeb551ed9d27d65b71985039229dedf976f0a274bd
parent068e89800140c796234503e801abc54c228e6da7 (diff)
downloadpoky-ee4f61b7e14a108d26eadc5e5b285e8d99c94545.tar.gz
oe-selftest: Fixed --list-tests-by tag option
Commit 35be67951305950ba797dc2efddbc7d88fc0556a broke the --list-tests-by tag option. This patch fixes that. Having a module in lib/oeqa/selftest named testmodule: class TestClass(oeSelfTest): @tag(feature='tag1') def test_func1(self): pass @tag(feature=('tag1', 'tag2')) def test_func2(self): pass @tag(feature=('tag2', 'tag3')) def test_func3(self): pass @tag(feature=('tag1', 'tag2', 'tag3')) def test_func4(self): pass $ oe-selftest --list-tests-by tag tag1 ID TAG(s) NAME CLASS MODULE ---- ---------------- ---------- --------- -------- tag1 test_func1 TestClass testmodule tag1, tag2 test_func2 TestClass testmodule tag1, tag2, tag3 test_func4 TestClass testmodule ______________________________ Filtering by: tag Looking for: tag1 Total found: 3 $ oe-selftest --list-tests-by tag tag1 tag2 ID TAG(s) NAME CLASS MODULE ---- ---------------- ---------- --------- -------- tag1 test_func1 TestClass testmodule tag1, tag2 test_func2 TestClass testmodule tag1, tag2, tag3 test_func4 TestClass testmodule tag2, tag3 test_func3 TestClass testmodule ______________________________ Filtering by: tag Looking for: tag1, tag2 Total found: 4 $ oe-selftest --list-tests-by tag tag* ID TAG(s) NAME CLASS MODULE ---- ---------------- ---------- --------- -------- tag1 test_func1 TestClass testmodule tag1, tag2 test_func2 TestClass testmodule tag1, tag2, tag3 test_func4 TestClass testmodule tag2, tag3 test_func3 TestClass testmodule ______________________________ Filtering by: tag Looking for: tag* Total found: 4 (From OE-Core rev: 28c1cffacf341ad64a5b68d8a0176f92b49135c0) Signed-off-by: Daniel Istrate <daniel.alexandrux.istrate@intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-xscripts/oe-selftest29
1 files changed, 19 insertions, 10 deletions
diff --git a/scripts/oe-selftest b/scripts/oe-selftest
index 9444244e02..d18348d1c6 100755
--- a/scripts/oe-selftest
+++ b/scripts/oe-selftest
@@ -32,6 +32,8 @@ import logging
32import argparse 32import argparse
33import subprocess 33import subprocess
34import time as t 34import time as t
35import re
36import fnmatch
35 37
36sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + '/lib') 38sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + '/lib')
37import scriptpath 39import scriptpath
@@ -197,7 +199,7 @@ class Tc:
197 self.tcclass = tcclass 199 self.tcclass = tcclass
198 self.tcmodule = tcmodule 200 self.tcmodule = tcmodule
199 self.tcid = tcid 201 self.tcid = tcid
200 # A test case can have multiple tags (as list or as tuples) otherwise str suffice 202 # A test case can have multiple tags (as tuples) otherwise str will suffice
201 self.tctag = tctag 203 self.tctag = tctag
202 self.fullpath = '.'.join(['oeqa', 'selftest', tcmodule, tcclass, tcname]) 204 self.fullpath = '.'.join(['oeqa', 'selftest', tcmodule, tcclass, tcname])
203 205
@@ -243,19 +245,17 @@ def get_all_tests():
243 testlist += get_tests_from_module(tmod) 245 testlist += get_tests_from_module(tmod)
244 return testlist 246 return testlist
245 247
248
246def get_testsuite_by(criteria, keyword): 249def get_testsuite_by(criteria, keyword):
247 # Get a testsuite based on 'keyword' 250 # Get a testsuite based on 'keyword'
248 # criteria: name, class, module, id, tag 251 # criteria: name, class, module, id, tag
249 # keyword: a list of tests, classes, modules, ids, tags 252 # keyword: a list of tests, classes, modules, ids, tags
250 253
251 import re
252 import fnmatch
253
254 ts = [] 254 ts = []
255 all_tests = get_all_tests() 255 all_tests = get_all_tests()
256 256
257 def get_matches(values): 257 def get_matches(values):
258 # Get a items and return the ones that match with keyword(s) 258 # Get an item and return the ones that match with keyword(s)
259 # values: the list of items (names, modules, classes...) 259 # values: the list of items (names, modules, classes...)
260 result = [] 260 result = []
261 remaining = values[:] 261 remaining = values[:]
@@ -267,9 +267,9 @@ def get_testsuite_by(criteria, keyword):
267 else: 267 else:
268 # Wildcard matching 268 # Wildcard matching
269 pattern = re.compile(fnmatch.translate(r"%s" % key)) 269 pattern = re.compile(fnmatch.translate(r"%s" % key))
270 added = [ x for x in remaining if pattern.match(x) ] 270 added = [x for x in remaining if pattern.match(x)]
271 result.extend(added) 271 result.extend(added)
272 remaining = [ x for x in remaining if not x in added ] 272 remaining = [x for x in remaining if x not in added]
273 273
274 return result 274 return result
275 275
@@ -292,14 +292,23 @@ def get_testsuite_by(criteria, keyword):
292 elif criteria == 'tag': 292 elif criteria == 'tag':
293 values = set() 293 values = set()
294 for tc in all_tests: 294 for tc in all_tests:
295 # tc can have multiple tags (as list or tuple) otherwise as str 295 # tc can have multiple tags (as tuple) otherwise str will suffice
296 if isinstance(tc.tctag, (list, tuple)): 296 if isinstance(tc.tctag, tuple):
297 values |= { str(tag) for tag in tc.tctag } 297 values |= { str(tag) for tag in tc.tctag }
298 else: 298 else:
299 values.add(str(tc.tctag)) 299 values.add(str(tc.tctag))
300 300
301 tags = get_matches(list(values)) 301 tags = get_matches(list(values))
302 ts = [ tc for tc in all_tests if str(tc.tctag) in tags ] 302
303 for tc in all_tests:
304 for tag in tags:
305 if isinstance(tc.tctag, tuple) and tag in tc.tctag:
306 ts.append(tc)
307 elif tag == tc.tctag:
308 ts.append(tc)
309
310 # Remove duplicates from the list
311 ts = list(set(ts))
303 312
304 return ts 313 return ts
305 314