changeset 42686:3364b4da5271

byteify-strings: add test for byteify-strings.py This tests the basic features expected from this script, some cases may not be covered yet. A future patch will demonstrate an issue with multi-line `(`, `[` and `{` alignment and propose a fix.
author Raphaël Gomès <rgomes@octobus.net>
date Fri, 02 Aug 2019 16:54:02 +0200
parents 863e9e7f8850
children 26a31c88e1a5
files tests/test-byteify-strings.t
diffstat 1 files changed, 217 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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"