Skip to content

Commit 46d69c1

Browse files
committed
Support multiple output files
We had "groups" as a way to run a test multiple ways where the output files might differ, but that only works if you can run the test multiple ways without recompiling. For tests where the output depends on something in the environment, we need a way to manage multiple output files, so that's what this does. Additionally I've used it in the Haskell indexer tests, where the GHC version affects the output.
1 parent e54e371 commit 46d69c1

21 files changed

+7038
-23
lines changed

glean/lang/haskell/tests/Main.hs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@
66
LICENSE file in the root directory of this source tree.
77
-}
88

9+
{-# LANGUAGE CPP #-}
910
module Main ( main ) where
1011

12+
#if __GLASGOW_HASKELL__ != 902
13+
import qualified Data.Text as Text
14+
#endif
1115
import System.Environment
1216

1317
import qualified Glean.Indexer.Haskell as Haskell ( indexer )
@@ -18,6 +22,21 @@ main :: IO ()
1822
main = do
1923
args <- getArgs
2024
withArgs (["--root", path, "--with-ghc", "ghc"] <> args) $
21-
testMain (driverFromIndexer Haskell.indexer)
25+
testMain driver
2226
where
2327
path = "glean/lang/haskell/tests/code"
28+
driver = (driverFromIndexer Haskell.indexer) {
29+
driverOutSuffix = outSuffix
30+
}
31+
32+
outSuffix :: Maybe String
33+
#if __GLASGOW_HASKELL__ == 902
34+
outSuffix = Nothing
35+
#else
36+
outSuffix =
37+
Just $
38+
Text.unpack $
39+
Text.intercalate "." $
40+
take 2 $
41+
Text.splitOn "." __GLASGOW_HASKELL_FULL_VERSION__
42+
#endif
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
[
2+
"@generated",
3+
{
4+
"key": {
5+
"defaults": [
6+
{
7+
"key": {
8+
"loc": {
9+
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
10+
"span": { "length": 10, "start": 535 }
11+
},
12+
"name": {
13+
"key": {
14+
"mod": {
15+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
16+
},
17+
"occ": { "key": { "name": "m", "namespace_": 0 } },
18+
"sort": { "external": { } }
19+
}
20+
}
21+
}
22+
}
23+
],
24+
"methods": [
25+
{
26+
"key": {
27+
"class_": {
28+
"key": {
29+
"mod": {
30+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
31+
},
32+
"occ": { "key": { "name": "C", "namespace_": 3 } },
33+
"sort": { "external": { } }
34+
}
35+
},
36+
"name": {
37+
"key": {
38+
"mod": {
39+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
40+
},
41+
"occ": { "key": { "name": "m", "namespace_": 0 } },
42+
"sort": { "external": { } }
43+
}
44+
}
45+
}
46+
}
47+
],
48+
"name": {
49+
"key": {
50+
"mod": {
51+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
52+
},
53+
"occ": { "key": { "name": "C", "namespace_": 3 } },
54+
"sort": { "external": { } }
55+
}
56+
}
57+
}
58+
}
59+
]
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
[
2+
"@generated",
3+
{
4+
"key": {
5+
"defaults": [
6+
{
7+
"key": {
8+
"loc": {
9+
"file": { "key": "glean/lang/haskell/tests/code/A.hs" },
10+
"span": { "length": 10, "start": 535 }
11+
},
12+
"name": {
13+
"key": {
14+
"mod": {
15+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
16+
},
17+
"occ": { "key": { "name": "m", "namespace_": 0 } },
18+
"sort": { "external": { } }
19+
}
20+
}
21+
}
22+
}
23+
],
24+
"methods": [
25+
{
26+
"key": {
27+
"class_": {
28+
"key": {
29+
"mod": {
30+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
31+
},
32+
"occ": { "key": { "name": "C", "namespace_": 3 } },
33+
"sort": { "external": { } }
34+
}
35+
},
36+
"name": {
37+
"key": {
38+
"mod": {
39+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
40+
},
41+
"occ": { "key": { "name": "m", "namespace_": 0 } },
42+
"sort": { "external": { } }
43+
}
44+
}
45+
}
46+
}
47+
],
48+
"name": {
49+
"key": {
50+
"mod": {
51+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
52+
},
53+
"occ": { "key": { "name": "C", "namespace_": 3 } },
54+
"sort": { "external": { } }
55+
}
56+
}
57+
}
58+
}
59+
]
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
[
2+
"@generated",
3+
{
4+
"key": {
5+
"constrs": [
6+
{
7+
"key": {
8+
"data_": {
9+
"key": {
10+
"mod": {
11+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
12+
},
13+
"occ": { "key": { "name": "R", "namespace_": 3 } },
14+
"sort": { "external": { } }
15+
}
16+
},
17+
"fields": [
18+
{
19+
"key": {
20+
"con": {
21+
"key": {
22+
"mod": {
23+
"key": {
24+
"name": { "key": "A" },
25+
"unit": { "key": "main" }
26+
}
27+
},
28+
"occ": { "key": { "name": "R", "namespace_": 1 } },
29+
"sort": { "external": { } }
30+
}
31+
},
32+
"name": {
33+
"key": {
34+
"mod": {
35+
"key": {
36+
"name": { "key": "A" },
37+
"unit": { "key": "main" }
38+
}
39+
},
40+
"occ": { "key": { "name": "f1", "namespace_": 0 } },
41+
"sort": { "external": { } }
42+
}
43+
}
44+
}
45+
},
46+
{
47+
"key": {
48+
"con": {
49+
"key": {
50+
"mod": {
51+
"key": {
52+
"name": { "key": "A" },
53+
"unit": { "key": "main" }
54+
}
55+
},
56+
"occ": { "key": { "name": "R", "namespace_": 1 } },
57+
"sort": { "external": { } }
58+
}
59+
},
60+
"name": {
61+
"key": {
62+
"mod": {
63+
"key": {
64+
"name": { "key": "A" },
65+
"unit": { "key": "main" }
66+
}
67+
},
68+
"occ": { "key": { "name": "f2", "namespace_": 0 } },
69+
"sort": { "external": { } }
70+
}
71+
}
72+
}
73+
}
74+
],
75+
"name": {
76+
"key": {
77+
"mod": {
78+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
79+
},
80+
"occ": { "key": { "name": "R", "namespace_": 1 } },
81+
"sort": { "external": { } }
82+
}
83+
}
84+
}
85+
}
86+
],
87+
"name": {
88+
"key": {
89+
"mod": {
90+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
91+
},
92+
"occ": { "key": { "name": "R", "namespace_": 3 } },
93+
"sort": { "external": { } }
94+
}
95+
}
96+
}
97+
},
98+
{
99+
"key": {
100+
"constrs": [
101+
{
102+
"key": {
103+
"data_": {
104+
"key": {
105+
"mod": {
106+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
107+
},
108+
"occ": { "key": { "name": "T", "namespace_": 3 } },
109+
"sort": { "external": { } }
110+
}
111+
},
112+
"fields": [ ],
113+
"name": {
114+
"key": {
115+
"mod": {
116+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
117+
},
118+
"occ": { "key": { "name": "C1", "namespace_": 1 } },
119+
"sort": { "external": { } }
120+
}
121+
}
122+
}
123+
},
124+
{
125+
"key": {
126+
"data_": {
127+
"key": {
128+
"mod": {
129+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
130+
},
131+
"occ": { "key": { "name": "T", "namespace_": 3 } },
132+
"sort": { "external": { } }
133+
}
134+
},
135+
"fields": [ ],
136+
"name": {
137+
"key": {
138+
"mod": {
139+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
140+
},
141+
"occ": { "key": { "name": "C2", "namespace_": 1 } },
142+
"sort": { "external": { } }
143+
}
144+
}
145+
}
146+
},
147+
{
148+
"key": {
149+
"data_": {
150+
"key": {
151+
"mod": {
152+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
153+
},
154+
"occ": { "key": { "name": "T", "namespace_": 3 } },
155+
"sort": { "external": { } }
156+
}
157+
},
158+
"fields": [ ],
159+
"name": {
160+
"key": {
161+
"mod": {
162+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
163+
},
164+
"occ": { "key": { "name": "C3", "namespace_": 1 } },
165+
"sort": { "external": { } }
166+
}
167+
}
168+
}
169+
}
170+
],
171+
"name": {
172+
"key": {
173+
"mod": {
174+
"key": { "name": { "key": "A" }, "unit": { "key": "main" } }
175+
},
176+
"occ": { "key": { "name": "T", "namespace_": 3 } },
177+
"sort": { "external": { } }
178+
}
179+
}
180+
}
181+
}
182+
]

0 commit comments

Comments
 (0)