File: make_tests.py

package info (click to toggle)
thunderbird 1%3A60.9.0-1~deb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 2,339,492 kB
  • sloc: cpp: 5,457,040; ansic: 2,360,385; python: 596,167; asm: 340,963; java: 326,296; xml: 258,830; sh: 84,445; makefile: 23,705; perl: 17,317; objc: 3,768; yacc: 1,766; ada: 1,681; lex: 1,364; pascal: 1,264; cs: 879; exp: 527; php: 436; lisp: 258; ruby: 153; awk: 152; sed: 53; csh: 27
file content (104 lines) | stat: -rw-r--r-- 2,765 bytes parent folder | download | duplicates (6)
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# Copyright (c) 2016 W3C
# Released under the W3C Test Suite License: see LICENSE.txt

# This tool creates .html test files for the WPT harness from corresponding .test
# files that it finds in the tree for this test collection.


import re
import time
import json
import fnmatch
import os
import shutil
import sys
import argparse

TESTTREE = '..'
DEFDIR   = '../definitions'
MANUAL_TEMPLATE = 'template_manual'
JS_TEMPLATE = 'template_js'

parser = argparse.ArgumentParser()

parser.add_argument('--examples', action="store_const", const=1)

args = parser.parse_args()

# pull in the template

manualTemplate = open(MANUAL_TEMPLATE, "r").read()
autoTemplate = open(JS_TEMPLATE, "r").read()

defList = []
defnames = ""

# find all of the definitions
for curdir, subdirList, fileList in os.walk(DEFDIR, topdown=True):
  for file in fnmatch.filter(fileList, "*.json"):
    theFile = os.path.join(curdir, file)
    try:
      testJSON = json.load(open(theFile, "r"))
    except ValueError as e:
      print "parse of " + theFile + " failed: " + e[0]
    else:
      theFile = re.sub("\.\./", "", theFile)
      defList.append(theFile)

if (len(defList)):
    defNames = '"' + '",\n  "'.join(defList) + '"'


# iterate over the folders looking for .test files

for curdir, subdirList, fileList in os.walk(TESTTREE, topdown=True):
  # skip the definitions directory
  subdirList[:] = [d for d in subdirList if d != "definitions"]
  # skip the examples directory
  if args.examples != 1:
    subdirList[:] = [d for d in subdirList if d != "examples"]

  for file in fnmatch.filter(fileList, "*.test"):
# for each .test file, create a corresponding .html file using the appropriate
# template
    theFile = os.path.join(curdir, file)
    try:
      testJSON = json.load(open(theFile, "r"))
    except ValueError as e:
      print "parse of " + theFile + " failed: " + e[0]
    else:
      try:
        testType = testJSON['testType']
      except:
        testType = "manual"

      templateFile = manualTemplate
      suffix = "-manual.html"

      if testType == "automated":
        templateFile = autoTemplate
        suffix = ".html"

      rfile = re.sub("\.\./", "", file)
      # interesting pattern is {{TESTFILE}}
      tcopy = re.sub("{{TESTFILE}}", rfile, templateFile)

      tcopy = re.sub("{{SCHEMADEFS}}", defNames, tcopy)

      try:
        title = testJSON['name']
      except:
        title = file
      tcopy = re.sub("{{TESTTITLE}}", title, tcopy)

      # target file is basename of theFile + '-manual.html'
      target = re.sub("\.test",suffix, theFile)

      try:
        out = open(target, "w")
        out.write(tcopy)
        out.close()
      except:
        print("Failed to create "+target)
      else:
        print("Created " + target)