Skip to content

Commit 6f3c635

Browse files
committed
Add Version.valid_requirement?/1
1 parent 2b12cb4 commit 6f3c635

File tree

3 files changed

+38
-17
lines changed

3 files changed

+38
-17
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* [Mix] Do not fail if a Mix dependency relies on an outdated Elixir version
66
* [Process] Add `Process.send/2` and `Process.send_after/3`
77
* [Version] Add `Version.compare/2`
8+
* [Version] Add `Version.valid_requirement?/1`
89

910
* Bug fixes
1011
* [Atom] Inspect `:...` and `:foo@bar` without quoting

lib/elixir/lib/version.ex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,16 @@ defmodule Version do
135135
def valid?(Version.Schema[major: nil]), do: false
136136
def valid?(Version.Schema[]), do: true
137137

138+
@spec valid_requirement?(String.t) :: boolean
139+
def valid_requirement?(requirement) do
140+
case Version.Parser.parse_requirement(requirement) do
141+
{ :ok, _req } ->
142+
true
143+
{ :error, reason } ->
144+
false
145+
end
146+
end
147+
138148
@doc """
139149
Parse a version string into a `Version.Schema`.
140150

lib/elixir/test/elixir/version_test.exs

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,33 @@ defmodule VersionTest do
4040
assert P.lexer(" > 2.4", []) == [:'>', "2.4"]
4141
end
4242

43-
test "lexer gets verified properly" do
44-
assert P.valid_requirement?(P.lexer("2.3", []))
45-
refute P.valid_requirement?(P.lexer("> >= 2.3", []))
46-
refute P.valid_requirement?(P.lexer("> 2.3 and", []))
47-
refute P.valid_requirement?(P.lexer("> 2.3 or and 4.3", []))
48-
assert P.valid_requirement?(P.lexer("> 2.4 and 4.5", []))
49-
refute P.valid_requirement?(P.lexer("& 1.0.0", []))
43+
test "valid requirement" do
44+
assert V.valid_requirement?("2.3")
45+
refute V.valid_requirement?("> >= 2.3")
46+
refute V.valid_requirement?("> 2.3 and")
47+
refute V.valid_requirement?("> 2.3 or and 4.3")
48+
assert V.valid_requirement?("> 2.4 and 4.5")
49+
refute V.valid_requirement?("& 1.0.0")
5050
end
5151

52-
test :parse do
52+
test "valid version" do
53+
assert V.valid?("1.0.0")
54+
assert V.valid?("1.0.0-beep+boop")
55+
assert V.valid?("1.0.0+boop")
56+
refute V.valid?("1.0.")
57+
refute V.valid("1.2.b")
58+
refute V.valid("abc")
59+
refute V.valid("-beep")
60+
end
61+
62+
test "parse" do
5363
assert V.Schema[major: 1, minor: 0, patch: 0] = V.parse("1")
5464
assert V.Schema[major: 1, minor: 2, patch: 0] = V.parse("1.2")
5565
assert V.Schema[major: 1, minor: 2, patch: 3] = V.parse("1.2.3")
5666
assert V.Schema[major: 1, minor: 4, patch: 0, pre: "5-g3318bd5"] = V.parse("1.4-5-g3318bd5")
5767
end
5868

59-
test :== do
69+
test "==" do
6070
assert V.match?("2.3", "2.3")
6171
refute V.match?("2.4", "2.3")
6272

@@ -74,15 +84,15 @@ defmodule VersionTest do
7484
assert V.match?("0.9.3", "== 0.9.3+dev")
7585
end
7686

77-
test :!= do
87+
test "!=" do
7888
assert V.match?("2.4", "!2.3")
7989
refute V.match?("2.3", "!2.3")
8090

8191
assert V.match?("2.4", "!= 2.3")
8292
refute V.match?("2.3", "!= 2.3")
8393
end
8494

85-
test :> do
95+
test ">" do
8696
assert V.match?("2.4", "> 2.3")
8797
refute V.match?("2.2", "> 2.3")
8898
refute V.match?("2.3", "> 2.3")
@@ -97,7 +107,7 @@ defmodule VersionTest do
97107
refute V.match?("0.1.2", "> 1.2.3-dev")
98108
end
99109

100-
test :>= do
110+
test ">=" do
101111
assert V.match?("2.4", ">= 2.3")
102112
refute V.match?("2.2", ">= 2.3")
103113
assert V.match?("2.3", ">= 2.3")
@@ -106,7 +116,7 @@ defmodule VersionTest do
106116
assert V.match?("1.0.0", ">= 1.0")
107117
end
108118

109-
test :< do
119+
test "<" do
110120
assert V.match?("2.2", "< 2.3")
111121
refute V.match?("2.4", "< 2.3")
112122
refute V.match?("2.3", "< 2.3")
@@ -117,13 +127,13 @@ defmodule VersionTest do
117127
refute V.match?("1.2.3-dev", "< 0.1.2")
118128
end
119129

120-
test :<= do
130+
test "<=" do
121131
assert V.match?("2.2", "<= 2.3")
122132
refute V.match?("2.4", "<= 2.3")
123133
assert V.match?("2.3", "<= 2.3")
124134
end
125135

126-
test :'~>' do
136+
test "~>" do
127137
assert V.match?("3.0", "~> 3.0")
128138
assert V.match?("3.2", "~> 3.0")
129139
refute V.match?("4.0", "~> 3.0")
@@ -150,12 +160,12 @@ defmodule VersionTest do
150160
refute V.match?("0.3.0-dev", "~> 0.2.0")
151161
end
152162

153-
test :and do
163+
test "and" do
154164
assert V.match?("0.9.3", "> 0.9 and < 0.10")
155165
refute V.match?("0.10.2", "> 0.9 and < 0.10")
156166
end
157167

158-
test :or do
168+
test "or" do
159169
assert V.match?("0.9.1", "0.9.1 or 0.9.3 or 0.9.5")
160170
assert V.match?("0.9.3", "0.9.1 or 0.9.3 or 0.9.5")
161171
assert V.match?("0.9.5", "0.9.1 or 0.9.3 or 0.9.5")

0 commit comments

Comments
 (0)