Skip to content

Commit

Permalink
reftests: add test for operators in opamfile filters
Browse files Browse the repository at this point in the history
  • Loading branch information
rjbou committed Sep 5, 2023
1 parent cfa447c commit 6d32dc6
Show file tree
Hide file tree
Showing 3 changed files with 289 additions and 0 deletions.
1 change: 1 addition & 0 deletions master_changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ users)
* Lint: add test for W53, to test extra file with good hash [#5639 @rjbou]
* Add several checksum & cache validation checks for archive, extra-source section, and extra-file field [#5560 @rjbou]
* Move local-cache into archive-field-checks test [#5560 @rjbou]
* Add test for filter operators in opam file [#5642 @rjbou]

### Engine

Expand Down
18 changes: 18 additions & 0 deletions tests/reftests/dune.inc
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,24 @@
%{targets}
(run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:extrasource.test} %{read-lines:testing-env}))))

(rule
(alias reftest-filter-operators)
(action
(diff filter-operators.test filter-operators.out)))

(alias
(name reftest)
(deps (alias reftest-filter-operators)))

(rule
(targets filter-operators.out)
(deps root-N0REP0)
(package opam)
(action
(with-stdout-to
%{targets}
(run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:filter-operators.test} %{read-lines:testing-env}))))

(rule
(alias reftest-init)
(action
Expand Down
270 changes: 270 additions & 0 deletions tests/reftests/filter-operators.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,270 @@
N0REP0
### : Test filter operators :
### OPAMSTRICT=0
### <pkg:ok.1>
opam-version: "2.0"
### <pkg:a.1>
opam-version: "2.0"
### <pkg:b.1>
opam-version: "2.0"
### <pkg:c.1>
opam-version: "2.0"
### <pkg:ko.1>
opam-version: "2.0"
### <pkg:ko-bool.1>
opam-version: "2.0"
### <pkg:ko-int.1>
opam-version: "2.0"
### <pkg:ko-string.1>
opam-version: "2.0"
### <pkg:error.1>
opam-version: "2.0"
### opam switch create operators --empty
### OPAMSHOW=1
### :: undefined ::
### <pkg:undefined.1>
opam-version: "2.0"
depends: [
"ok"
"a" { ?defin }
]
### opam install undefined
The following actions would be performed:
=== install 2 packages
- install ok 1 [required by undefined]
- install undefined 1
### OPAMVAR_defin=something opam install undefined
The following actions would be performed:
=== install 3 packages
- install a 1 [required by undefined]
- install ok 1 [required by undefined]
- install undefined 1
### <pkg:undefined.1>
opam-version: "2.0"
depends: [
"ok"
"a" { ?(defined & undefined) }
]
### OPAMVAR_defined=something opam install undefined
The following actions would be performed:
=== install 2 packages
- install ok 1 [required by undefined]
- install undefined 1
### OPAMVAR_defined=something OPAMVAR_undefined=defined opam install undefined
The following actions would be performed:
=== install 2 packages
- install ok 1 [required by undefined]
- install undefined 1
### <pkg:undefined.1>
opam-version: "2.0"
depends: [
"ok"
"a" { undefined | true }
"b" { undefined & false }
]
### opam install undefined
The following actions would be performed:
=== install 3 packages
- install a 1 [required by undefined]
- install ok 1 [required by undefined]
- install undefined 1
### :: not ::
### <pkg:not.1>
opam-version: "2.0"
depends: [ "ok" "a" { !bvar } ]
### OPAMVAR_bvar=true opam install not
The following actions would be performed:
=== install 2 packages
- install not 1
- install ok 1 [required by not]
### OPAMVAR_bvar=false opam install not
The following actions would be performed:
=== install 3 packages
- install a 1 [required by not]
- install not 1
- install ok 1 [required by not]
### :: and ::
### <pkg:and.1>
opam-version: "2.0"
depends: [
"ok"
"a" { true & true }
"ko" { true & false }
"error" { false & false }
]
### opam install and
The following actions would be performed:
=== install 3 packages
- install a 1 [required by and]
- install and 1
- install ok 1 [required by and]
### :: or ::
### <pkg:or.1>
opam-version: "2.0"
depends: [
"ok"
"a" { true | true }
"b" { true | false }
"ko" { false | false }
]
### opam install or
The following actions would be performed:
=== install 4 packages
- install a 1 [required by or]
- install b 1 [required by or]
- install ok 1 [required by or]
- install or 1
### :: eq ::
### <pkg:eq.1>
opam-version: "2.0"
depends: [
"ok"
"a" { 2=2 }
"ko-int" { 2=3 }
"b" { "a" = "a" }
"ko-string" { "a" = "b" }
"c" { true = true }
"ko-bool" { true = false }
]
### opam install eq
The following actions would be performed:
=== install 5 packages
- install a 1 [required by eq]
- install b 1 [required by eq]
- install c 1 [required by eq]
- install eq 1
- install ok 1 [required by eq]
### :: neq ::
### <pkg:neq.1>
opam-version: "2.0"
depends: [
"ok"
"a" { 2!=3 }
"ko-int" { 2!=2 }
"b" { "a" != "b" }
"ko-string" { "b" != "b" }
"c" { true != false }
"ko-bool" { true != true }
]
### opam install neq
The following actions would be performed:
=== install 5 packages
- install a 1 [required by neq]
- install b 1 [required by neq]
- install c 1 [required by neq]
- install neq 1
- install ok 1 [required by neq]
### :: lt ::
### <pkg:lt.1>
opam-version: "2.0"
depends: [
"ok"
"a" { 2<3 }
"ko-int" { 3<2 }
"b" { "a" < "b" }
"ko-string" { "b" < "a" }
"c" { false < true }
"ko-bool" { true < false }
]
### opam install lt
The following actions would be performed:
=== install 5 packages
- install a 1 [required by lt]
- install b 1 [required by lt]
- install c 1 [required by lt]
- install lt 1
- install ok 1 [required by lt]
### :: lteq ::
### <pkg:lteq.1>
opam-version: "2.0"
depends: [
"ok"
"a" { 2<=3 & 2<=2 }
"ko-int" { 3<=2 }
"b" { "a" <= "b" & "a" <= "a" }
"ko-string" { "b" <= "a" }
"c" { false <= true & false <= false }
"ko-bool" { true <= false }
]
### opam install lteq
The following actions would be performed:
=== install 5 packages
- install a 1 [required by lteq]
- install b 1 [required by lteq]
- install c 1 [required by lteq]
- install lteq 1
- install ok 1 [required by lteq]
### :: gt ::
### <pkg:gt.1>
opam-version: "2.0"
depends: [
"ok"
"a" { 4>3 }
"ko-int" { 3>4 }
"b" { "d" > "b" }
"ko-string" { "b" > "d" }
"c" { true > false }
"ko-bool" { false > true }
]
### opam install gt
The following actions would be performed:
=== install 5 packages
- install a 1 [required by gt]
- install b 1 [required by gt]
- install c 1 [required by gt]
- install gt 1
- install ok 1 [required by gt]
### :: gteq ::
### <pkg:gteq.1>
opam-version: "2.0"
depends: [
"ok"
"a" { 4>=3 & 4>=4 }
"ko-int" { 3>=4 }
"b" { "d" >= "b" & "d" >= "d" }
"ko-string" { "b" >= "d" }
"c" { true >= false & true >= true }
"ko-bool" { false >= true }
]
### opam install gteq
The following actions would be performed:
=== install 5 packages
- install a 1 [required by gteq]
- install b 1 [required by gteq]
- install c 1 [required by gteq]
- install gteq 1
- install ok 1 [required by gteq]
### :: Combination ::
### <pkg:comb.1>
opam-version: "2.0"
depends: [
"ok"
"a" { false & false | true }
"ko" { false & (false | true) }
]
### opam install comb
The following actions would be performed:
=== install 3 packages
- install a 1 [required by comb]
- install comb 1
- install ok 1 [required by comb]
### :: Package combination ::
### <pkg:pkg-comb.1>
opam-version:"2.0"
messages: [
"this is a package"
"with all defined variables" { a+b:var }
]
### OPAMVAR_a_var=true OPAMVAR_b_var=false opam install pkg-comb
The following actions would be performed:
=== install 1 package
- install pkg-comb 1 this is a package
### OPAMVAR_a_var=false OPAMVAR_b_var=false opam install pkg-comb
The following actions would be performed:
=== install 1 package
- install pkg-comb 1 this is a package
### OPAMVAR_a_var=true OPAMVAR_b_var=true opam install pkg-comb
The following actions would be performed:
=== install 1 package
- install pkg-comb 1 this is a package
with all defined variables

0 comments on commit 6d32dc6

Please sign in to comment.