--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-byteify-strings.t Fri Aug 02 16:54:02 2019 +0200
@@ -0,0 +1,217 @@
+#require py3
+
+ $ byteify_strings () {
+ > $PYTHON "$TESTDIR/../contrib/byteify-strings.py" "$@"
+ > }
+
+Test in-place
+
+ $ cat > testfile.py <<EOF
+ > obj['test'] = b"1234"
+ > mydict.iteritems()
+ > EOF
+ $ byteify_strings testfile.py -i
+ $ cat testfile.py
+ obj[b'test'] = b"1234"
+ mydict.iteritems()
+
+Test with dictiter
+
+ $ cat > testfile.py <<EOF
+ > obj['test'] = b"1234"
+ > mydict.iteritems()
+ > EOF
+ $ byteify_strings testfile.py --dictiter
+ obj[b'test'] = b"1234"
+ mydict.items()
+
+Test kwargs-like objects
+
+ $ cat > testfile.py <<EOF
+ > kwargs['test'] = "123"
+ > kwargs[test['testing']]
+ > kwargs[test[[['testing']]]]
+ > kwargs[kwargs['testing']]
+ > kwargs.get('test')
+ > kwargs.pop('test')
+ > kwargs.get('test', 'testing')
+ > kwargs.pop('test', 'testing')
+ > kwargs.setdefault('test', 'testing')
+ >
+ > opts['test'] = "123"
+ > opts[test['testing']]
+ > opts[test[[['testing']]]]
+ > opts[opts['testing']]
+ > opts.get('test')
+ > opts.pop('test')
+ > opts.get('test', 'testing')
+ > opts.pop('test', 'testing')
+ > opts.setdefault('test', 'testing')
+ >
+ > commitopts['test'] = "123"
+ > commitopts[test['testing']]
+ > commitopts[test[[['testing']]]]
+ > commitopts[commitopts['testing']]
+ > commitopts.get('test')
+ > commitopts.pop('test')
+ > commitopts.get('test', 'testing')
+ > commitopts.pop('test', 'testing')
+ > commitopts.setdefault('test', 'testing')
+ > EOF
+ $ byteify_strings testfile.py --treat-as-kwargs kwargs opts commitopts
+ kwargs['test'] = b"123"
+ kwargs[test[b'testing']]
+ kwargs[test[[[b'testing']]]]
+ kwargs[kwargs['testing']]
+ kwargs.get('test')
+ kwargs.pop('test')
+ kwargs.get('test', b'testing')
+ kwargs.pop('test', b'testing')
+ kwargs.setdefault('test', b'testing')
+
+ opts['test'] = b"123"
+ opts[test[b'testing']]
+ opts[test[[[b'testing']]]]
+ opts[opts['testing']]
+ opts.get('test')
+ opts.pop('test')
+ opts.get('test', b'testing')
+ opts.pop('test', b'testing')
+ opts.setdefault('test', b'testing')
+
+ commitopts['test'] = b"123"
+ commitopts[test[b'testing']]
+ commitopts[test[[[b'testing']]]]
+ commitopts[commitopts['testing']]
+ commitopts.get('test')
+ commitopts.pop('test')
+ commitopts.get('test', b'testing')
+ commitopts.pop('test', b'testing')
+ commitopts.setdefault('test', b'testing')
+
+Test attr*() as methods
+
+ $ cat > testfile.py <<EOF
+ > setattr(o, 'a', 1)
+ > util.setattr(o, 'ae', 1)
+ > util.getattr(o, 'alksjdf', 'default')
+ > util.addattr(o, 'asdf')
+ > util.hasattr(o, 'lksjdf', 'default')
+ > util.safehasattr(o, 'lksjdf', 'default')
+ > @eh.wrapfunction(func, 'lksjdf')
+ > def f():
+ > pass
+ > @eh.wrapclass(klass, 'lksjdf')
+ > def f():
+ > pass
+ > EOF
+ $ byteify_strings testfile.py --allow-attr-methods
+ setattr(o, 'a', 1)
+ util.setattr(o, 'ae', 1)
+ util.getattr(o, 'alksjdf', b'default')
+ util.addattr(o, 'asdf')
+ util.hasattr(o, 'lksjdf', b'default')
+ util.safehasattr(o, 'lksjdf', b'default')
+ @eh.wrapfunction(func, 'lksjdf')
+ def f():
+ pass
+ @eh.wrapclass(klass, 'lksjdf')
+ def f():
+ pass
+
+Test without attr*() as methods
+
+ $ cat > testfile.py <<EOF
+ > setattr(o, 'a', 1)
+ > util.setattr(o, 'ae', 1)
+ > util.getattr(o, 'alksjdf', 'default')
+ > util.addattr(o, 'asdf')
+ > util.hasattr(o, 'lksjdf', 'default')
+ > util.safehasattr(o, 'lksjdf', 'default')
+ > @eh.wrapfunction(func, 'lksjdf')
+ > def f():
+ > pass
+ > @eh.wrapclass(klass, 'lksjdf')
+ > def f():
+ > pass
+ > EOF
+ $ byteify_strings testfile.py
+ setattr(o, 'a', 1)
+ util.setattr(o, b'ae', 1)
+ util.getattr(o, b'alksjdf', b'default')
+ util.addattr(o, b'asdf')
+ util.hasattr(o, b'lksjdf', b'default')
+ util.safehasattr(o, b'lksjdf', b'default')
+ @eh.wrapfunction(func, b'lksjdf')
+ def f():
+ pass
+ @eh.wrapclass(klass, b'lksjdf')
+ def f():
+ pass
+
+Test ignore comments
+
+ $ cat > testfile.py <<EOF
+ > #py3-transform: off
+ > "none"
+ > "of"
+ > 'these'
+ > s = """should"""
+ > d = '''be'''
+ > #py3-transform: on
+ > "this should"
+ > 'and this also'
+ >
+ > #no-py3-transform
+ > l = "this should be ignored"
+ > l2 = "this shouldn't"
+ >
+ > EOF
+ $ byteify_strings testfile.py
+ #py3-transform: off
+ "none"
+ "of"
+ 'these'
+ s = """should"""
+ d = '''be'''
+ #py3-transform: on
+ b"this should"
+ b'and this also'
+
+ #no-py3-transform
+ l = "this should be ignored"
+ l2 = b"this shouldn't"
+
+Test triple-quoted strings
+
+ $ cat > testfile.py <<EOF
+ > """This is ignored
+ > """
+ >
+ > line = """
+ > This should not be
+ > """
+ > line = '''
+ > Neither should this
+ > '''
+ > EOF
+ $ byteify_strings testfile.py
+ """This is ignored
+ """
+
+ line = b"""
+ This should not be
+ """
+ line = b'''
+ Neither should this
+ '''
+
+Test prefixed strings
+
+ $ cat > testfile.py <<EOF
+ > obj['test'] = b"1234"
+ > obj[r'test'] = u"1234"
+ > EOF
+ $ byteify_strings testfile.py
+ obj[b'test'] = b"1234"
+ obj[r'test'] = u"1234"