view tests/test-byteify-strings.t @ 43961:b69d5f3a41d0

rust-index: add a struct wrapping the C index Implementing the full index logic in one go is journey larger than we would like. To achieve a smoother transition, we start with a simple Rust wrapper that delegates allwork to the current C implementation. Once we will have a fully working index object in Rust, we can easily start using more and more Rust Code with it. The object in this patch is functional and tested. However, multiple of the currently existing rust (in the `hg-cpython` crate) requires a `Graph`. Right now we build this `Graph` (as cindex::Index) using the C index passed as a PyObject. They will have to be updated to be made compatible. Differential Revision: https://phab.mercurial-scm.org/D7655
author Georges Racinet <georges.racinet@octobus.net>
date Mon, 23 Dec 2019 10:02:50 -0800
parents 3a463e5e470b
children 8250ecb53f30
line wrap: on
line source

#require py37

  $ byteify_strings () {
  >   "$PYTHON" "$TESTDIR/../contrib/byteify-strings.py" "$@"
  > }

Test version

  $ byteify_strings --version
  Byteify strings * (glob)

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"

Test multi-line alignment

  $ cat > testfile.py <<'EOF'
  > def foo():
  >     error.Abort(_("foo"
  >                  "bar"
  >                  "%s")
  >                % parameter)
  > {
  >     'test': dict,
  >     'test2': dict,
  > }
  > [
  >    "thing",
  >    "thing2"
  > ]
  > (
  >    "tuple",
  >    "tuple2",
  > )
  > {"thing",
  >  }
  > EOF
  $ byteify_strings testfile.py
  def foo():
      error.Abort(_(b"foo"
                    b"bar"
                    b"%s")
                  % parameter)
  {
      b'test': dict,
      b'test2': dict,
  }
  [
     b"thing",
     b"thing2"
  ]
  (
     b"tuple",
     b"tuple2",
  )
  {b"thing",
   }