|
1 # Copyright (C) 2011-2013 Ms2ger |
|
2 # |
|
3 # Permission is hereby granted, free of charge, to any person obtaining a copy |
|
4 # of this software and associated documentation files (the "Software"), to deal |
|
5 # in the Software without restriction, including without limitation the rights |
|
6 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
7 # copies of the Software, and to permit persons to whom the Software is |
|
8 # furnished to do so, subject to the following conditions: |
|
9 # |
|
10 # The above copyright notice and this permission notice shall be included in |
|
11 # all copies or substantial portions of the Software. |
|
12 # |
|
13 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
14 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
15 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
16 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
17 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
18 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|
19 # THE SOFTWARE. |
|
20 |
|
21 |
|
22 def parseManifest(fd): |
|
23 def parseReftestLine(chunks): |
|
24 assert len(chunks) % 2 == 0 |
|
25 reftests = [] |
|
26 for i in range(2, len(chunks), 2): |
|
27 if not chunks[i] in ["==", "!="]: |
|
28 raise Exception("Misformatted reftest line " + line) |
|
29 reftests.append([chunks[i], chunks[1], chunks[i + 1]]) |
|
30 return reftests |
|
31 |
|
32 dirs = [] |
|
33 autotests = [] |
|
34 reftests = [] |
|
35 othertests = [] |
|
36 supportfiles = [] |
|
37 for fullline in fd: |
|
38 line = fullline.strip() |
|
39 if not line: |
|
40 continue |
|
41 |
|
42 chunks = line.split(" ") |
|
43 |
|
44 if chunks[0] == "MANIFEST": |
|
45 raise Exception("MANIFEST listed on line " + line) |
|
46 |
|
47 if chunks[0] == "dir": |
|
48 dirs.append(chunks[1]) |
|
49 elif chunks[0] == "support" and chunks[1] == "dir": |
|
50 dirs.append(chunks[1]) |
|
51 elif chunks[0] == "ref": |
|
52 if len(chunks) % 2: |
|
53 raise Exception("Missing chunk in line " + line) |
|
54 reftests.extend(parseReftestLine(chunks)) |
|
55 elif chunks[0] == "support": |
|
56 supportfiles.append(chunks[1]) |
|
57 elif chunks[0] in ["manual", "parser", "http"]: |
|
58 othertests.append(chunks[1]) |
|
59 else: |
|
60 # automated |
|
61 autotests.append(chunks[0]) |
|
62 return dirs, autotests, reftests, othertests, supportfiles |
|
63 |
|
64 |
|
65 def parseManifestFile(path): |
|
66 fp = open(path) |
|
67 dirs, autotests, reftests, othertests, supportfiles = parseManifest(fp) |
|
68 fp.close() |
|
69 return dirs, autotests, reftests, othertests, supportfiles |