Blame view

3rdparty/jsoncpp-1.9.5/test/pyjsontestrunner.py 2.3 KB
09c2d08c   Hu Chunming   arm交付版
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  # Copyright 2007 Baptiste Lepilleur and The JsonCpp Authors
  # Distributed under MIT license, or public domain if desired and
  # recognized in your jurisdiction.
  # See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
  
  """Simple implementation of a json test runner to run the test against
  json-py."""
  
  from __future__ import print_function
  import sys
  import os.path
  import json
  import types
  
  if len(sys.argv) != 2:
      print("Usage: %s input-json-file", sys.argv[0])
      sys.exit(3)
  
  input_path = sys.argv[1]
  base_path = os.path.splitext(input_path)[0]
  actual_path = base_path + '.actual'
  rewrite_path = base_path + '.rewrite'
  rewrite_actual_path = base_path + '.actual-rewrite'
  
  def valueTreeToString(fout, value, path = '.'):
      ty = type(value)
      if ty  is types.DictType:
          fout.write('%s={}\n' % path)
          suffix = path[-1] != '.' and '.' or ''
          names = value.keys()
          names.sort()
          for name in names:
              valueTreeToString(fout, value[name], path + suffix + name)
      elif ty is types.ListType:
          fout.write('%s=[]\n' % path)
          for index, childValue in zip(xrange(0,len(value)), value):
              valueTreeToString(fout, childValue, path + '[%d]' % index)
      elif ty is types.StringType:
          fout.write('%s="%s"\n' % (path,value))
      elif ty is types.IntType:
          fout.write('%s=%d\n' % (path,value))
      elif ty is types.FloatType:
          fout.write('%s=%.16g\n' % (path,value))
      elif value is True:
          fout.write('%s=true\n' % path)
      elif value is False:
          fout.write('%s=false\n' % path)
      elif value is None:
          fout.write('%s=null\n' % path)
      else:
          assert False and "Unexpected value type"
  
  def parseAndSaveValueTree(input, actual_path):
      root = json.loads(input)
      fout = file(actual_path, 'wt')
      valueTreeToString(fout, root)
      fout.close()
      return root
  
  def rewriteValueTree(value, rewrite_path):
      rewrite = json.dumps(value)
      #rewrite = rewrite[1:-1]  # Somehow the string is quoted ! jsonpy bug ?
      file(rewrite_path, 'wt').write(rewrite + '\n')
      return rewrite
  
  input = file(input_path, 'rt').read()
  root = parseAndSaveValueTree(input, actual_path)
  rewrite = rewriteValueTree(json.write(root), rewrite_path)
  rewrite_root = parseAndSaveValueTree(rewrite, rewrite_actual_path)
  
  sys.exit(0)