Skip to content

Commit 864efc1

Browse files
authored
Merge pull request #134 from dillonkearns/experiment/coverage-elm-pages
Add more random generator test coverage and use elm-pages for random generator
2 parents 84c0f33 + 2fd69ff commit 864efc1

9 files changed

Lines changed: 1616 additions & 169 deletions

File tree

test/property-test/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ generated/
33
.elm-pages/
44
elm-stuff/
55
script/elm-stuff/
6+
script/.elm-pages/
7+
script/.coverage/
8+
script/coverage/
69
review/elm-stuff/
710
codegen/Gen/
811
package-lock.json

test/property-test/README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Property Tests
2+
3+
Random program generator for elm-codegen. Generates random Elm files using elm-codegen's API, compiles them with `elm make`, and runs `elm-review` to catch bugs.
4+
5+
## Quick start
6+
7+
```sh
8+
cd test/property-test
9+
npm install
10+
SEED=42 COUNT=10 bash run.sh
11+
```
12+
13+
## Running the generator directly
14+
15+
```sh
16+
cd test/property-test/script
17+
npx elm-pages run src/GenerateProgram.elm -- --seed 42 --count 20
18+
```
19+
20+
## Code coverage
21+
22+
The `--coverage-include ../../../src` flag limits instrumentation to elm-codegen's own source. Without it, the report includes the generator itself and generated codegen helpers (`Gen.*` modules), which are all 0% and dilute the coverage numbers.
23+
24+
```sh
25+
cd test/property-test/script
26+
npx elm-pages run --coverage --coverage-include ../../../src src/GenerateProgram.elm -- --seed 42 --count 10
27+
```
28+
29+
Coverage output is written to `script/coverage/lcov.info`.

test/property-test/generate.mjs

Lines changed: 0 additions & 100 deletions
This file was deleted.

test/property-test/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
"type": "module",
44
"private": true,
55
"scripts": {
6-
"generate": "node generate.mjs",
6+
"generate": "cd script && npx elm-pages run src/GenerateProgram.elm",
77
"test": "node harness.mjs",
88
"property-test": "sh run.sh"
99
},
1010
"devDependencies": {
1111
"elm": "^0.19.1-6",
1212
"elm-codegen": "^0.6.3",
13+
"elm-pages": "^3.3.4",
1314
"elm-review": "^2.12.0"
1415
}
1516
}

test/property-test/run.sh

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,6 @@ echo "=== elm-codegen Property Tests ==="
1010
echo "Seed: $SEED Count: $COUNT"
1111
echo ""
1212

13-
# Install npm deps if needed
14-
if [ ! -d "node_modules" ]; then
15-
echo "Installing dependencies..."
16-
npm install
17-
fi
18-
19-
# Generate codegen helpers if needed
20-
if [ ! -d "codegen/Gen" ]; then
21-
echo "Generating codegen helpers..."
22-
npx elm-codegen install
23-
fi
24-
2513
# Clean previous generated files, preserve elm.json
2614
rm -rf generated/src generated/manifest.json generated/elm-stuff
2715
mkdir -p generated/src
@@ -50,9 +38,11 @@ if [ ! -f "generated/elm.json" ]; then
5038
ELMJSON
5139
fi
5240

53-
# Generate programs
41+
# Generate programs using elm-pages script
5442
echo "Generating $COUNT test programs with seed $SEED..."
55-
node generate.mjs --seed "$SEED" --count "$COUNT"
43+
cd script
44+
npx elm-pages run src/GenerateProgram.elm -- --seed "$SEED" --count "$COUNT"
45+
cd ..
5646
echo ""
5747

5848
# Run the harness (compile + elm-review)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default {};

test/property-test/script/elm.json

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
"elm-version": "0.19.1",
99
"dependencies": {
1010
"direct": {
11+
"dillonkearns/elm-cli-options-parser": "5.0.1",
12+
"dillonkearns/elm-pages": "12.1.2",
1113
"elm/core": "1.0.5",
1214
"elm/json": "1.1.4",
1315
"elm/random": "1.0.0",
@@ -16,9 +18,44 @@
1618
"the-sett/elm-pretty-printer": "3.3.1"
1719
},
1820
"indirect": {
21+
"Chadtech/elm-bool-extra": "2.4.2",
22+
"MaybeJustJames/yaml": "2.1.7",
23+
"avh4/elm-color": "1.0.0",
24+
"danyx23/elm-mimetype": "4.0.1",
25+
"dillonkearns/elm-bcp47-language-tag": "2.0.0",
26+
"dillonkearns/elm-date-or-date-time": "2.0.0",
27+
"dillonkearns/elm-form": "3.1.0",
28+
"dillonkearns/elm-ts-json": "2.1.2",
29+
"elm/browser": "1.0.2",
30+
"elm/bytes": "1.0.8",
31+
"elm/file": "1.0.5",
32+
"elm/html": "1.0.1",
33+
"elm/http": "2.0.0",
1934
"elm/parser": "1.1.0",
35+
"elm/regex": "1.0.0",
2036
"elm/time": "1.0.0",
21-
"stil4m/structured-writer": "1.0.3"
37+
"elm/url": "1.0.0",
38+
"elm/virtual-dom": "1.0.5",
39+
"elm-community/dict-extra": "2.4.0",
40+
"elm-community/list-extra": "8.7.0",
41+
"elm-explorations/test": "2.2.1",
42+
"elmcraft/core-extra": "2.3.0",
43+
"fredcy/elm-parseint": "2.0.1",
44+
"jluckyiv/elm-utc-date-strings": "1.0.0",
45+
"justinmimbs/date": "4.1.0",
46+
"mdgriffith/elm-codegen": "6.0.2",
47+
"miniBill/elm-codec": "2.3.0",
48+
"miniBill/elm-unicode": "1.1.1",
49+
"noahzgordon/elm-color-extra": "1.0.2",
50+
"pithub/elm-parser-bug-workaround": "1.0.0",
51+
"pithub/elm-parser-extra": "1.0.0",
52+
"robinheghan/fnv1a": "1.0.0",
53+
"robinheghan/murmur3": "1.0.0",
54+
"rtfeldman/elm-css": "18.0.0",
55+
"rtfeldman/elm-iso8601-date-strings": "1.1.4",
56+
"stil4m/structured-writer": "1.0.3",
57+
"the-sett/elm-syntax-dsl": "6.0.5",
58+
"wolfadex/elm-ansi": "3.0.1"
2259
}
2360
},
2461
"test-dependencies": {

0 commit comments

Comments
 (0)