@@ -3,15 +3,15 @@ defmodule UUIDTest do
3
3
4
4
doctest UUID , except: [ uuid1: 1 , uuid1: 3 , uuid4: 0 , uuid4: 1 , uuid4: 2 , uuid6: 2 , uuid6: 3 ]
5
5
6
- test "UUID. info/1 invalid argument type" do
6
+ test "info/1 invalid argument type" do
7
7
assert UUID . info ( :not_a_uuid ) == { :error , "Invalid argument; Expected: String" }
8
8
end
9
9
10
- test "UUID. info/1 invalid UUID" do
10
+ test "info/1 invalid UUID" do
11
11
assert UUID . info ( "not_a_uuid" ) == { :error , "Invalid argument; Not a valid UUID: not_a_uuid" }
12
12
end
13
13
14
- test "UUID. info!/1 invalid argument type" do
14
+ test "info!/1 invalid argument type" do
15
15
assert_raise (
16
16
ArgumentError ,
17
17
"Invalid argument; Expected: String" ,
@@ -21,7 +21,7 @@ defmodule UUIDTest do
21
21
)
22
22
end
23
23
24
- test "UUID. info!/1 invalid UUID" do
24
+ test "info!/1 invalid UUID" do
25
25
assert_raise (
26
26
ArgumentError ,
27
27
"Invalid argument; Not a valid UUID: not_a_uuid" ,
@@ -31,14 +31,91 @@ defmodule UUIDTest do
31
31
)
32
32
end
33
33
34
- test "UUID v1 to UUID v6 conversion" do
35
- uuid1 = UUID . uuid1 ( ) |> validate_uuid ( 1 )
36
- assert uuid1 == UUID . uuid1_to_uuid6 ( uuid1 ) |> validate_uuid ( 6 ) |> UUID . uuid6_to_uuid1 ( )
34
+ test "binary_to_string!/2 converts binaries to strings" do
35
+ for type <- [ :default , :raw , :hex , :urn , :slug ] do
36
+ UUID . uuid4 ( :raw ) |> UUID . binary_to_string! ( type ) |> UUID . valid? ( )
37
+ end
38
+ end
39
+
40
+ test "binary_to_string!/2 with invalid UUID type returns error" do
41
+ for type <- [ :default , :raw , :hex , :urn , :slug ] do
42
+ assert_raise (
43
+ ArgumentError ,
44
+ "Invalid argument; Expected: <<uuid::128>>" ,
45
+ fn ->
46
+ UUID . binary_to_string! ( 123 , type )
47
+ end
48
+ )
49
+ end
50
+ end
51
+
52
+ test "binary_to_string!/2 with invalid UUID returns error" do
53
+ for type <- [ :default , :hex , :urn , :slug ] do
54
+ assert_raise (
55
+ ArgumentError ,
56
+ "Invalid binary data; Expected: <<uuid::128>>" ,
57
+ fn ->
58
+ UUID . binary_to_string! ( "not_a_uuid" , type )
59
+ end
60
+ )
61
+ end
62
+ end
63
+
64
+ test "string_to_binary!/2 converts strings to binaries" do
65
+ for type <- [ :default , :raw , :hex , :urn , :slug ] do
66
+ UUID . uuid4 ( type ) |> UUID . string_to_binary! ( ) |> UUID . valid? ( )
67
+ end
68
+ end
69
+
70
+ test "string_to_binary!/2 with invalid UUID type returns error" do
71
+ assert_raise (
72
+ ArgumentError ,
73
+ "Invalid argument; Expected: String" ,
74
+ fn ->
75
+ UUID . string_to_binary! ( 123 )
76
+ end
77
+ )
78
+ end
79
+
80
+ test "string_to_binary!/2 with invalid UUID returns error" do
81
+ assert_raise (
82
+ ArgumentError ,
83
+ "Invalid argument; Not a valid UUID: foo" ,
84
+ fn ->
85
+ UUID . string_to_binary! ( "foo" )
86
+ end
87
+ )
88
+ end
89
+
90
+ test "uuid1_to_uuid6/1 converts UUIDs" do
91
+ uuid1 = UUID . uuid1 ( ) |> validate ( 1 )
92
+ assert uuid1 == UUID . uuid1_to_uuid6 ( uuid1 ) |> validate ( 6 ) |> UUID . uuid6_to_uuid1 ( )
93
+ end
94
+
95
+ test "uuid6_to_uuid1/1 converts UUIDs" do
96
+ uuid6 = UUID . uuid6 ( ) |> validate ( 6 )
97
+ assert uuid6 == UUID . uuid6_to_uuid1 ( uuid6 ) |> validate ( 1 ) |> UUID . uuid1_to_uuid6 ( )
98
+ end
99
+
100
+ test "valid?/2 validates valid UUIDs" do
101
+ assert UUID . uuid1 ( ) |> UUID . valid? ( )
102
+ assert UUID . uuid1 ( ) |> UUID . valid? ( 1 )
103
+
104
+ assert UUID . uuid3 ( :dns , "my.domain.com" ) |> UUID . valid? ( )
105
+ assert UUID . uuid3 ( :dns , "my.domain.com" ) |> UUID . valid? ( 3 )
106
+
107
+ assert UUID . uuid4 ( ) |> UUID . valid? ( )
108
+ assert UUID . uuid4 ( ) |> UUID . valid? ( 4 )
109
+
110
+ assert UUID . uuid5 ( :dns , "my.domain.com" ) |> UUID . valid? ( )
111
+ assert UUID . uuid5 ( :dns , "my.domain.com" ) |> UUID . valid? ( 5 )
112
+
113
+ assert UUID . uuid6 ( ) |> UUID . valid? ( )
114
+ assert UUID . uuid6 ( ) |> UUID . valid? ( 6 )
37
115
end
38
116
39
- test "UUID v6 to UUID v1 conversion" do
40
- uuid6 = UUID . uuid6 ( ) |> validate_uuid ( 6 )
41
- assert uuid6 == UUID . uuid6_to_uuid1 ( uuid6 ) |> validate_uuid ( 1 ) |> UUID . uuid1_to_uuid6 ( )
117
+ test "valid?/2 invalidates invalid UUIDs" do
118
+ refute UUID . valid? ( "foo" )
42
119
end
43
120
44
121
# Expand the lines in info_tests.txt into individual tests for the
@@ -52,20 +129,19 @@ defmodule UUIDTest do
52
129
{ expected , [ ] } = Code . eval_string ( unquote ( expected ) )
53
130
result = UUID . info! ( unquote ( input ) )
54
131
assert ^ expected = result
55
- validate_uuid ( UUID . binary_to_string! ( result . binary ) , expected . version )
132
+ validate ( UUID . binary_to_string! ( result . binary ) , expected . version )
56
133
end
57
134
58
135
test "UUID.info/1 #{ name } " do
59
136
{ expected , [ ] } = Code . eval_string ( unquote ( expected ) )
60
137
{ :ok , result } = UUID . info ( unquote ( input ) )
61
138
assert ^ expected = result
62
- validate_uuid ( UUID . binary_to_string! ( result . binary ) , expected . version )
139
+ validate ( UUID . binary_to_string! ( result . binary ) , expected . version )
63
140
end
64
141
end
65
142
66
- defp validate_uuid ( uuid , version ) when version in 1 .. 6 do
67
- r = ~r/ ^[0-9a-f]{8}-[0-9a-f]{4}-#{ version } [0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/ i
68
- assert Regex . match? ( r , uuid )
143
+ defp validate ( uuid , version ) when version in 0 .. 6 do
144
+ assert UUID . valid? ( uuid , version )
69
145
uuid
70
146
end
71
147
end
0 commit comments