[Piglit] [PATCH 7/7] grouptools.py: assert if \\ or / is in a group
Dylan Baker
baker.dylan.c at gmail.com
Thu Mar 12 15:42:10 PDT 2015
This removes the _normalize function and adds an assertion for \\ or for
/
It also adds some tests for the assertions in grouptools.
Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
---
framework/grouptools.py | 27 +++-------------------
framework/tests/grouptools_tests.py | 46 +++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+), 24 deletions(-)
diff --git a/framework/grouptools.py b/framework/grouptools.py
index abe52cf..d6fc921 100644
--- a/framework/grouptools.py
+++ b/framework/grouptools.py
@@ -29,8 +29,6 @@ posix paths they may not start with a leading '/'.
"""
-import os.path
-
__all__ = [
'commonprefix',
'from_path',
@@ -44,27 +42,14 @@ __all__ = [
SEPERATOR = '@'
-def _normalize(group):
- """Helper to normalize group paths on Windows.
-
- Although grouptools' heart is in the right place, the fact is that it fails
- to spot when developers mistakedly use os.path.join for groups on Posix
- systems.
-
- So until this is improved somehow, make grouptools behavior on Windows
- match Linux, ie, just silently ignore mixed use of grouptools and os.path.
- """
- if os.path.sep != '/':
- group = group.replace(os.path.sep, '/')
- return group
-
-
def _assert_illegal(group):
"""Helper that checks for illegal characters in input."""
assert isinstance(group, (str, unicode)), \
'Type must be string or unicode but was {}'.format(type(group))
assert '\\' not in group, \
'Groups are not paths and cannot contain \\. ({})'.format(group)
+ assert '/' not in group, \
+ 'Groups are not paths and cannot contain /. ({})'.format(group)
def testname(group):
@@ -77,7 +62,6 @@ def testname(group):
Analogous to os.path.basename
"""
- group = _normalize(group)
_assert_illegal(group)
return splitname(group)[1]
@@ -93,7 +77,6 @@ def groupname(group):
Analogous to os.path.dirname
"""
- group = _normalize(group)
_assert_illegal(group)
return splitname(group)[0]
@@ -101,7 +84,6 @@ def groupname(group):
def splitname(group):
"""Split a group name, Returns tuple "(group, test)"."""
- group = _normalize(group)
_assert_illegal(group)
i = group.rfind(SEPERATOR) + 1
@@ -113,7 +95,6 @@ def splitname(group):
def commonprefix(args):
"""Given a list of groups, returns the longest common leading component."""
- args = [_normalize(group) for group in args]
for group in args:
_assert_illegal(group)
@@ -148,11 +129,10 @@ def join(first, *args):
conincedently very similar to the way posixpath.join is implemented.
"""
- args = [_normalize(group) for group in args]
- first = _normalize(first)
_assert_illegal(first)
for group in args:
_assert_illegal(group)
+
# Only append things if the group is not empty, otherwise we'll get
# extra SEPERATORs where we don't want them
if group:
@@ -169,7 +149,6 @@ def split(group):
If input is '' return an empty list
"""
- group = _normalize(group)
_assert_illegal(group)
if group == '':
return []
diff --git a/framework/tests/grouptools_tests.py b/framework/tests/grouptools_tests.py
index a8b55fb..5377749 100644
--- a/framework/tests/grouptools_tests.py
+++ b/framework/tests/grouptools_tests.py
@@ -60,6 +60,52 @@ def generate_tests():
yield test, func, args, expect
+ at utils.nose_generator
+def generate_error_tests():
+ """Generate tests for the various failure problems."""
+
+ @nt.raises(AssertionError)
+ def test(func, args):
+ """The input must be either a str or unicode."""
+ func(args)
+
+ tests = [
+ ('testname', grouptools.testname),
+ ('groupname', grouptools.groupname),
+ ('splitname', grouptools.splitname),
+ ('split', grouptools.split),
+ ('join', grouptools.join),
+ ]
+
+ for name, func in tests:
+ test.description = \
+ 'grouptools.{}: raises an error if args are invalid'.format(name)
+ # This must be a list of lists to trigger commonprefix
+ yield test, func, ['foo']
+
+ test.description = \
+ 'grouptools.{}: raises an error if / is in the args'.format(name)
+ yield test, func, 'foo/bar'
+
+ test.description = \
+ 'grouptools.{}: raises an error if \\ is in the args'.format(name)
+ yield test, func, 'foo\\bar'
+
+ # commonprefix takes a list of things rather than things, so it must be
+ # tested separately
+ test.description = \
+ 'grouptools.commonprefix: raises an error if args are invalid'
+ yield test, grouptools.commonprefix, [['foo']]
+
+ test.description = \
+ 'grouptools.commonprefix: raises an error if / is in args'
+ yield test, grouptools.commonprefix, ['foo/bar', 'boink']
+
+ test.description = \
+ 'grouptools.commonprefix: raises an error if \\ is in args'
+ yield test, grouptools.commonprefix, ['foo\\bar', 'boink']
+
+
def test_grouptools_join():
"""grouptools.join: works correctly."""
# XXX: this hardcoded / needs to be fixed
--
2.3.1
More information about the Piglit
mailing list