Skip to content

Commit 6098027

Browse files
committed
ok ready with rely
1 parent 7d003a3 commit 6098027

File tree

8 files changed

+117
-80
lines changed

8 files changed

+117
-80
lines changed

runtests.sh

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
#!/bin/bash
22
set -ex
3-
43
esy
5-
TARGET_BIN=$(esy echo '#{self.target_dir}/install/default/bin')
6-
$TARGET_BIN/UtilTests.exe
7-
$TARGET_BIN/ExamplesTests
8-
$TARGET_BIN/AnalyzeFixtureTests
9-
BASE=old_ocamls/407
10-
(cd $BASE; esy)
11-
$TARGET_BIN/AnalyzeFixtureTests -b $BASE
4+
# We need to run the binary outside of the esy env.
5+
sh -c '$(esy x which RunTests.exe)'

src/analyze/BuildSystem.re

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,10 @@ let getBsbExecutable = rootPath =>
121121
);
122122

123123
let parseOCamlVersion = versionString =>switch (Utils.split_on_char('.', String.trim(versionString))) {
124-
| ["4", "02", _] => Ok(V402)
125-
| ["4", "06", _] => Ok(V406)
126-
| ["4", "07", _] => Ok(V407)
127-
| ["4", "08", _] => Ok(V408)
124+
| ["4", "02", ..._] => Ok(V402)
125+
| ["4", "06", ..._] => Ok(V406)
126+
| ["4", "07", ..._] => Ok(V407)
127+
| ["4", "08", ..._] => Ok(V408)
128128
| _ => Error("Unsupported OCaml version: " ++ versionString)
129129
}
130130

src/analyze_fixture_tests/AnalyzeFixtureTests.re

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
open TestFramework;
22

3-
let {describe} =
3+
let {describe, describeOnly} =
44
describeConfig
55
|> withLifecycle(lc =>
66
lc
@@ -39,26 +39,40 @@ let projectDirs = [
3939

4040
let baseDir = Sys.getcwd();
4141
projectDirs->Belt.List.forEach(projectDir => {
42+
43+
let compilerVersion = switch (TestUtils.compilerForProjectDir(projectDir)) {
44+
| Error(e) =>
45+
print_endline("FATAL: Unable to determine compiler + build system for project dir " ++ projectDir);
46+
exit(1)
47+
| Ok((buildSystem, compilerPath, compilerVersion)) =>
48+
compilerVersion
49+
};
50+
4251
// describe(projectDir, ({describe}) => {
4352
tests->Belt.List.forEach(m => {
4453
module M = (val m);
4554
describe(
4655
M.name ++ " in dir " ++ projectDir,
4756
({describe}) => {
48-
let fileName = "./src/analyze_fixture_tests/" ++ M.name ++ ".txt";
49-
let expected = Files.readFileExn(fileName);
57+
let fileName = "./src/analyze_fixture_tests/" ++ M.name ++ ".txt";
58+
let expected = Files.readFileExn(fileName);
5059
let sections = TestParser.collectSections(expected->Utils.splitLines);
5160
sections->Belt.List.forEach(section => {
5261
describe(section.heading, ({test}) => {
5362
section.children
5463
->Belt.List.forEach(item => {
5564
test(item.name, ({expect}) => {
65+
let expected = item.versionedResults->Belt.List.getBy(((v, _)) => v == compilerVersion);
66+
let expected = switch expected {
67+
| None => item.result
68+
| Some((_, results)) => results
69+
};
5670
expect.string(
5771
M.getOutput(~projectDir=Filename.concat(baseDir, projectDir), item.otherFiles, item.mainContent)
5872
->String.trim,
5973
).
6074
toEqual(
61-
String.concat("\n", item.result)->String.trim,
75+
String.concat("\n", expected)->String.trim,
6276
)
6377
})
6478
})

src/analyze_fixture_tests/TestDefinition.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ include One;
100100
let m = Two.<c1>num;
101101
-->
102102
1: PASS
103+
--> 4.02
104+
1: FAIL wrong position 0-0 expected 4
103105

104106
=== Cross-file functor include
105107
--- One__ns.re
@@ -115,3 +117,5 @@ include One.F({let x = 20;});
115117
let m = Two.<c1>num;
116118
-->
117119
1: PASS
120+
--> 4.02
121+
1: FAIL wrong position 0-0 expected 45

src/analyze_fixture_tests/lib/TestParser.re

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11

2+
let versionedResultsRx = Str.regexp({|--> \([0-9]+\.[0-9]+\)|});
3+
24
let sectionHeader = line => {
35
if (Utils.startsWith(line, "### ")) {
46
Some(`Header(Utils.sliceToEnd(line, 4)))
57
} else if (Utils.startsWith(line, "=== ")) {
68
Some(`Test(Utils.sliceToEnd(line, 4)))
9+
} else if (Str.string_match(versionedResultsRx, line, 0)) {
10+
Some(`VersionedResults(Str.matched_group(1, line)))
711
} else if (Utils.startsWith(line, "-->")) {
812
Some(`Results)
913
} else if (Utils.startsWith(line, "---")) {
@@ -54,9 +58,23 @@ let parseTest = (lines) => {
5458
switch (header) {
5559
| Some(`Results) => {
5660
let (lines, after) = getUntilNextSection(final);
57-
(files, lines, after)
61+
let rec loop = (collection, lines) => {
62+
let (header, rest) = peekSection(lines);
63+
switch (header) {
64+
| Some(`VersionedResults(version)) =>
65+
switch (Analyze.BuildSystem.parseOCamlVersion(version)) {
66+
| Ok(version) =>
67+
let (lines, after) = getUntilNextSection(rest);
68+
loop([(version, lines), ...collection], after);
69+
| Error(err) => failwith("Invalid 'versioned result' line: " ++ lines->List.hd)
70+
}
71+
| _ => (collection, lines)
72+
};
73+
}
74+
let (otherResults, after) = loop([], after);
75+
(files, lines, otherResults, after)
5876
}
59-
| _ => (files, [], after)
77+
| _ => (files, [], [], after)
6078
}
6179
};
6280

@@ -79,15 +97,15 @@ let rec parseSections = lines => switch lines {
7997
| Some(header) => switch header {
8098
| `Header(name) => [`Header(name), ...parseSections(rest)]
8199
| `Test(name) => {
82-
let (files, result, rest) = parseTest(rest);
100+
let (files, result, versionedResults, rest) = parseTest(rest);
83101
let (mainFile, otherFiles) = splitFiles(files);
84102
switch mainFile {
85103
| None => {
86104
print_endline("No Test.re file");
87105
parseSections(rest)
88106
}
89107
| Some(mainContent) => {
90-
[`Test(name, mainContent, otherFiles, result), ...parseSections(rest)]
108+
[`Test(name, mainContent, otherFiles, result, versionedResults), ...parseSections(rest)]
91109
}
92110
}
93111
}
@@ -97,7 +115,7 @@ let rec parseSections = lines => switch lines {
97115
}
98116
};
99117

100-
type test = {name: string, mainContent: string, otherFiles: list((string, string)), result: list(string)};
118+
type test = {name: string, mainContent: string, otherFiles: list((string, string)), result: list(string), versionedResults: list((Analyze.BuildSystem.compilerVersion, list(string)))};
101119
type section = {heading: string, children: list(test)}
102120

103121
let addChild = (section, child) => {...section, children: [child, ...section.children]}
@@ -106,7 +124,7 @@ let collectSections = lines => {
106124
let parts = parseSections(lines);
107125
let rec loop = (current, previous, parts) => switch parts {
108126
| [`Header(heading), ...rest] => loop({heading, children: []}, [current, ...previous], rest)
109-
| [`Test(name, mainContent, otherFiles, result), ...rest] => loop(current->addChild({name, mainContent, otherFiles, result}), previous, rest)
127+
| [`Test(name, mainContent, otherFiles, result, versionedResults), ...rest] => loop(current->addChild({name, mainContent, otherFiles, result, versionedResults}), previous, rest)
110128
| [] => [current, ...previous] |> List.rev |> List.map(({heading, children}) => {heading, children: List.rev(children)})
111129
};
112130
switch parts {

src/analyze_fixture_tests/lib/TestUtils.re

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -226,60 +226,60 @@ let setUp = (~projectDir, files, text) => {
226226
(state, package, (), moduleData)
227227
};
228228

229-
let iterTests = (lines, iter) => {
230-
let sections = TestParser.parseSections(lines);
231-
let hasOnly = Belt.List.some(sections, s => switch s {
232-
| `Test(name, _, _, _) => Utils.startsWith(name, "*")
233-
| _ => false
234-
});
235-
sections |> List.iter(section => switch section {
236-
| `Test(name, mainFile, files, result) => {
237-
if (!hasOnly || Utils.startsWith(name, "*")) {
238-
iter(name, mainFile, files, result)
239-
}
240-
}
241-
| _ => ()
242-
})
243-
};
229+
// let iterTests = (lines, iter) => {
230+
// let sections = TestParser.parseSections(lines);
231+
// let hasOnly = Belt.List.some(sections, s => switch s {
232+
// | `Test(name, _, _, _, _) => Utils.startsWith(name, "*")
233+
// | _ => false
234+
// });
235+
// sections |> List.iter(section => switch section {
236+
// | `Test(name, mainFile, files, result, versionedResults) => {
237+
// if (!hasOnly || Utils.startsWith(name, "*")) {
238+
// iter(name, mainFile, files, result)
239+
// }
240+
// }
241+
// | _ => ()
242+
// })
243+
// };
244244

245-
let process = (lines, getResult) => {
246-
let sections = TestParser.parseSections(lines);
247-
let hasOnly = Belt.List.some(sections, s => switch s {
248-
| `Test(name, _, _, _) => Utils.startsWith(name, "*")
249-
| _ => false
250-
});
251-
let totalTests = sections->Belt.List.keep(s => switch s { | `Test(_) => true | _ => false})|> List.length;
252-
let results = sections |> List.map(section => switch section {
253-
| `Header(name) => ("### " ++ name ++ "\n", None)
254-
| `Test(name, mainFile, files, result) => {
255-
if (hasOnly && !Utils.startsWith(name, "*")) {
256-
("=== " ++ name ++ "\n" ++ TestParser.printFiles(mainFile, files) ++ "\n"
257-
++ (result == [] ? "" : "-->\n" ++ String.concat("\n", result)), None)
258-
} else {
259-
let newResult = getResult(files, mainFile);
260-
let failed = newResult->String.trim != String.concat("\n", result)->String.trim;
261-
if (failed) {
262-
print_endline("❌ " ++ name);
263-
print_endline(newResult);
264-
print_endline("❗ Expected")
265-
print_endline(String.concat("\n", result));
266-
} else {
267-
print_endline("✅ " ++ name);
268-
};
269-
// print_endline("-----[ " ++ name ++ " ]-----");
270-
/* print_endline("Running " ++ name); */
271-
/* files |> List.iter(((name, _)) => print_endline("File: " ++ name)); */
272-
("=== " ++ name ++ "\n" ++ TestParser.printFiles(mainFile, files) ++ "\n"
273-
++ (newResult == "" ? "" : "-->\n" ++ newResult ++ "\n"), failed ? Some(name) : None)
274-
}
275-
}
276-
});
277-
let (sections, failures) = results -> Belt.List.reduce(([], []), ((sections, failures), (section, failure)) => (
278-
[section, ...sections],
279-
switch (failure) {
280-
| None => failures
281-
| Some(failure) => [failure, ...failures]
282-
}
283-
));
284-
(sections->List.rev, failures->List.rev, totalTests)
285-
};
245+
// let process = (lines, getResult) => {
246+
// let sections = TestParser.parseSections(lines);
247+
// let hasOnly = Belt.List.some(sections, s => switch s {
248+
// | `Test(name, _, _, _) => Utils.startsWith(name, "*")
249+
// | _ => false
250+
// });
251+
// let totalTests = sections->Belt.List.keep(s => switch s { | `Test(_) => true | _ => false})|> List.length;
252+
// let results = sections |> List.map(section => switch section {
253+
// | `Header(name) => ("### " ++ name ++ "\n", None)
254+
// | `Test(name, mainFile, files, result) => {
255+
// if (hasOnly && !Utils.startsWith(name, "*")) {
256+
// ("=== " ++ name ++ "\n" ++ TestParser.printFiles(mainFile, files) ++ "\n"
257+
// ++ (result == [] ? "" : "-->\n" ++ String.concat("\n", result)), None)
258+
// } else {
259+
// let newResult = getResult(files, mainFile);
260+
// let failed = newResult->String.trim != String.concat("\n", result)->String.trim;
261+
// if (failed) {
262+
// print_endline("❌ " ++ name);
263+
// print_endline(newResult);
264+
// print_endline("❗ Expected")
265+
// print_endline(String.concat("\n", result));
266+
// } else {
267+
// print_endline("✅ " ++ name);
268+
// };
269+
// // print_endline("-----[ " ++ name ++ " ]-----");
270+
// /* print_endline("Running " ++ name); */
271+
// /* files |> List.iter(((name, _)) => print_endline("File: " ++ name)); */
272+
// ("=== " ++ name ++ "\n" ++ TestParser.printFiles(mainFile, files) ++ "\n"
273+
// ++ (newResult == "" ? "" : "-->\n" ++ newResult ++ "\n"), failed ? Some(name) : None)
274+
// }
275+
// }
276+
// });
277+
// let (sections, failures) = results -> Belt.List.reduce(([], []), ((sections, failures), (section, failure)) => (
278+
// [section, ...sections],
279+
// switch (failure) {
280+
// | None => failures
281+
// | Some(failure) => [failure, ...failures]
282+
// }
283+
// ));
284+
// (sections->List.rev, failures->List.rev, totalTests)
285+
// };

src/full_tests/FullTests.re

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,5 @@ files->Belt.List.forEach(fileName => {
5959
| Ok(TypeError(_message, _) | SyntaxError(_message, _, _)) =>
6060
print_endline(" Error compiling: " ++ uri);
6161
};
62-
// print_endline(Analyze.State.Show.state(state, package));
6362
}
6463
});

test/RunTests.re

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
include ExamplesTests;
22
include AnalyzeFixtureTests;
33
include UtilTests;
4-
TestFramework.cli()
4+
TestFramework.cli()
5+
6+
// Things I wish rely would do:
7+
// - watch mode would be awesome
8+
// - allow you to select a subset of the tests to run, from cli args
9+
// - allow you to nest describes with beforeEach n stuff
10+
// - display the sub-items of a describe as they're being run (at least sub-describes)
11+
// - it would be fine to use readline to replace them one after another, but I just want
12+
// feedback that things are happening.

0 commit comments

Comments
 (0)