- WVPASSEQ(grafted_path_components([('/chroot', '/')], '/foo'),
- [('', '/'), ('foo', '/foo')])
- WVPASSEQ(grafted_path_components([('/foo/bar', '/')], '/foo/bar/baz/bax'),
- [('', '/foo/bar'),
- ('baz', '/foo/bar/baz'),
- ('bax', '/foo/bar/baz/bax')])
- WVPASSEQ(grafted_path_components([('/foo/bar/baz', '/bax')],
- '/foo/bar/baz/1/2'),
- [('', None),
- ('bax', '/foo/bar/baz'),
- ('1', '/foo/bar/baz/1'),
- ('2', '/foo/bar/baz/1/2')])
- WVPASSEQ(grafted_path_components([('/foo', '/bar/baz/bax')],
- '/foo/bar'),
- [('', None),
- ('bar', None),
- ('baz', None),
- ('bax', '/foo'),
- ('bar', '/foo/bar')])
- WVPASSEQ(grafted_path_components([('/foo/bar/baz', '/a/b/c')],
- '/foo/bar/baz'),
- [('', None), ('a', None), ('b', None), ('c', '/foo/bar/baz')])
- WVPASSEQ(grafted_path_components([('/', '/a/b/c/')], '/foo/bar'),
- [('', None), ('a', None), ('b', None), ('c', '/'),
- ('foo', '/foo'), ('bar', '/foo/bar')])
- WVEXCEPT(Exception, grafted_path_components, 'foo', [])
+ with no_lingering_errors():
+ WVPASSEQ(grafted_path_components([(b'/chroot', b'/')], b'/foo'),
+ [(b'', b'/'), (b'foo', b'/foo')])
+ WVPASSEQ(grafted_path_components([(b'/foo/bar', b'/')],
+ b'/foo/bar/baz/bax'),
+ [(b'', b'/foo/bar'),
+ (b'baz', b'/foo/bar/baz'),
+ (b'bax', b'/foo/bar/baz/bax')])
+ WVPASSEQ(grafted_path_components([(b'/foo/bar/baz', b'/bax')],
+ b'/foo/bar/baz/1/2'),
+ [(b'', None),
+ (b'bax', b'/foo/bar/baz'),
+ (b'1', b'/foo/bar/baz/1'),
+ (b'2', b'/foo/bar/baz/1/2')])
+ WVPASSEQ(grafted_path_components([(b'/foo', b'/bar/baz/bax')],
+ b'/foo/bar'),
+ [(b'', None),
+ (b'bar', None),
+ (b'baz', None),
+ (b'bax', b'/foo'),
+ (b'bar', b'/foo/bar')])
+ WVPASSEQ(grafted_path_components([(b'/foo/bar/baz', b'/a/b/c')],
+ b'/foo/bar/baz'),
+ [(b'', None), (b'a', None), (b'b', None), (b'c', b'/foo/bar/baz')])
+ WVPASSEQ(grafted_path_components([(b'/', b'/a/b/c/')], b'/foo/bar'),
+ [(b'', None), (b'a', None), (b'b', None), (b'c', b'/'),
+ (b'foo', b'/foo'), (b'bar', b'/foo/bar')])
+ WVEXCEPT(Exception, grafted_path_components, b'foo', [])
+
+
+@wvtest
+def test_shstr():
+ with no_lingering_errors():
+ # Do nothing for strings and bytes
+ WVPASSEQ(shstr(b''), b'')
+ WVPASSEQ(shstr(b'1'), b'1')
+ WVPASSEQ(shstr(b'1 2'), b'1 2')
+ WVPASSEQ(shstr(b"1'2"), b"1'2")
+ WVPASSEQ(shstr(''), '')
+ WVPASSEQ(shstr('1'), '1')
+ WVPASSEQ(shstr('1 2'), '1 2')
+ WVPASSEQ(shstr("1'2"), "1'2")
+
+ # Escape parts of sequences
+ WVPASSEQ(shstr((b'1 2', b'3')), b"'1 2' 3")
+ WVPASSEQ(shstr((b"1'2", b'3')), b"'1'\"'\"'2' 3")
+ WVPASSEQ(shstr((b"'1", b'3')), b"''\"'\"'1' 3")
+ WVPASSEQ(shstr(('1 2', '3')), "'1 2' 3")
+ WVPASSEQ(shstr(("1'2", '3')), "'1'\"'\"'2' 3")
+ WVPASSEQ(shstr(("'1", '3')), "''\"'\"'1' 3")