-
Notifications
You must be signed in to change notification settings - Fork 85
Expand file tree
/
Copy pathExamplesTests.re
More file actions
86 lines (79 loc) · 3.2 KB
/
ExamplesTests.re
File metadata and controls
86 lines (79 loc) · 3.2 KB
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
open Analyze;
let checkExampleProject = (rootPath, sourcePaths) => {
let state = {
...TopTypes.empty(),
rootPath,
rootUri: Util.Utils.toUri(rootPath),
};
print_endline(" Project directory in " ++ rootPath);
let files = sourcePaths->Belt.List.map(path => {
print_endline(" Source directory " ++ path);
Files.collect(path, FindFiles.isSourceFile)
})->Belt.List.toArray->Belt.List.concatMany;
files->Belt.List.reduce([], (failures, path) => {
let uri = Utils.toUri(path);
switch (State.getPackage(~reportDiagnostics=(_, _) => (), uri, state)) {
| Error(message) =>
print_endline(" Unable to get package: " ++ uri)
print_endline(message);
[`PackageFail(uri, message), ...failures]
| Ok(package) => switch (State.getCompilationResult(uri, state, ~package)) {
| Error(message) =>
print_endline(" Invalid compilation result: " ++ message);
[`FileFail(uri, message), ...failures]
| Ok(result) =>
print_endline(" Good: " ++ uri);
failures
}
}
})
};
let projects = [
("example-project", ["src"], "npm install"),
("example-es6-imports", ["src"], "npm install"),
("example-react", ["src", "__tests__"], "npm install"),
("name_with_underscore", ["src"], "npm install"),
("bs-3.1.5", ["src"], "npm install"),
("example-esy-dune-project", ["lib", "bin"], "esy"),
];
let main = (baseDir, verbose, args) => {
print_endline("Checking each example project to make sure we can analyze each source file...");
projects->Belt.List.reduce([], (failures, (root, sourcePaths, prepareCommand)) => {
if (args == [] || List.mem(root, args)) {
print_endline("\027[43;30m# Example " ++ root ++ "\027[0m");
let root = Filename.concat(baseDir, Filename.concat("examples", root));
print_endline("Running \027[32m" ++ prepareCommand ++ "\027[0m in " ++ root);
let (stdout, stderr, success) = Util.Commands.execFull(~pwd=root, prepareCommand);
if (!success) {
[`Project(root, prepareCommand, stdout @ stderr), ...failures]
} else {
let sourcePaths = sourcePaths->Belt.List.map(Filename.concat(root));
checkExampleProject(root, sourcePaths) @ failures
}
} else {
failures
}
})
};
let (verbose, args) = Belt.List.reduce(Belt.List.fromArray(Sys.argv)->List.tl, (false, []), ((verbose, args), arg) => switch arg {
| "-v" | "--verbose" => (true, args)
| _ => (verbose, [arg, ...args])
});
if (verbose) {
Util.Log.spamError := true;
};
let failures = main(Sys.getcwd(), verbose, List.rev(args));
if (failures == []) {
print_endline("\n\027[42;30m## All clear! ##\027[0m");
exit(0);
} else {
print_endline("\n\027[41;30m## Tests failed! ##\027[0m");
failures->Belt.List.forEach(failure => switch failure {
| `Project(root, prepareCommand, output) =>
print_endline("- Project prepare failed: " ++ root ++ " : " ++ prepareCommand);
print_endline(" " ++ String.concat("\n ", output));
| `PackageFail(uri, message) => print_endline("- Failed to get package for " ++ uri ++ " : " ++ message)
| `FileFail(uri, message) => print_endline("- Failed to get compilation info for " ++ uri ++ " : " ++ message)
});
exit(10)
}