5
5
use cargo_test_support:: project;
6
6
use cargo_test_support:: registry:: Package ;
7
7
8
- // Ensure that the "-Z minimal-versions" CLI option works and the minimal
9
- // version of a dependency ends up in the lock file.
10
8
#[ cargo_test]
11
- fn minimal_version_cli ( ) {
9
+ fn simple ( ) {
12
10
Package :: new ( "dep" , "1.0.0" ) . publish ( ) ;
13
11
Package :: new ( "dep" , "1.1.0" ) . publish ( ) ;
14
12
@@ -34,5 +32,217 @@ fn minimal_version_cli() {
34
32
35
33
let lock = p. read_lockfile ( ) ;
36
34
37
- assert ! ( !lock. contains( "1.1.0" ) ) ;
35
+ assert ! (
36
+ lock. contains( "1.0.0" ) ,
37
+ "dep minimal version must be present"
38
+ ) ;
39
+ assert ! (
40
+ !lock. contains( "1.1.0" ) ,
41
+ "dep maximimal version cannot be present"
42
+ ) ;
43
+ }
44
+
45
+ #[ cargo_test]
46
+ fn mixed_dependencies ( ) {
47
+ Package :: new ( "dep" , "1.0.0" ) . publish ( ) ;
48
+ Package :: new ( "dep" , "1.1.0" ) . publish ( ) ;
49
+ Package :: new ( "dep" , "1.2.0" ) . publish ( ) ;
50
+
51
+ let p = project ( )
52
+ . file (
53
+ "Cargo.toml" ,
54
+ r#"
55
+ [package]
56
+ name = "foo"
57
+ authors = []
58
+ version = "0.0.1"
59
+
60
+ [dependencies]
61
+ dep = "1.0"
62
+
63
+ [dev-dependencies]
64
+ dep = "1.1"
65
+ "# ,
66
+ )
67
+ . file ( "src/main.rs" , "fn main() {}" )
68
+ . build ( ) ;
69
+
70
+ p. cargo ( "generate-lockfile -Zminimal-versions" )
71
+ . masquerade_as_nightly_cargo ( & [ "minimal-versions" ] )
72
+ . run ( ) ;
73
+
74
+ let lock = p. read_lockfile ( ) ;
75
+
76
+ assert ! (
77
+ !lock. contains( "1.0.0" ) ,
78
+ "dep incompatible version cannot be present"
79
+ ) ;
80
+ assert ! (
81
+ lock. contains( "1.1.0" ) ,
82
+ "dep minimal version must be present"
83
+ ) ;
84
+ assert ! (
85
+ !lock. contains( "1.2.0" ) ,
86
+ "dep maximimal version cannot be present"
87
+ ) ;
88
+ }
89
+
90
+ #[ cargo_test]
91
+ fn yanked ( ) {
92
+ Package :: new ( "dep" , "1.0.0" ) . yanked ( true ) . publish ( ) ;
93
+ Package :: new ( "dep" , "1.1.0" ) . publish ( ) ;
94
+ Package :: new ( "dep" , "1.2.0" ) . publish ( ) ;
95
+
96
+ let p = project ( )
97
+ . file (
98
+ "Cargo.toml" ,
99
+ r#"
100
+ [package]
101
+ name = "foo"
102
+ authors = []
103
+ version = "0.0.1"
104
+
105
+ [dependencies]
106
+ dep = "1.0"
107
+ "# ,
108
+ )
109
+ . file ( "src/main.rs" , "fn main() {}" )
110
+ . build ( ) ;
111
+
112
+ p. cargo ( "generate-lockfile -Zminimal-versions" )
113
+ . masquerade_as_nightly_cargo ( & [ "minimal-versions" ] )
114
+ . run ( ) ;
115
+
116
+ let lock = p. read_lockfile ( ) ;
117
+
118
+ assert ! (
119
+ lock. contains( "1.1.0" ) ,
120
+ "dep minimal version must be present"
121
+ ) ;
122
+ assert ! (
123
+ !lock. contains( "1.0.0" ) ,
124
+ "yanked minimal version must be skipped"
125
+ ) ;
126
+ assert ! (
127
+ !lock. contains( "1.2.0" ) ,
128
+ "dep maximimal version cannot be present"
129
+ ) ;
130
+ }
131
+
132
+ #[ cargo_test]
133
+ fn indirect ( ) {
134
+ Package :: new ( "indirect" , "2.0.0" ) . publish ( ) ;
135
+ Package :: new ( "indirect" , "2.1.0" ) . publish ( ) ;
136
+ Package :: new ( "indirect" , "2.2.0" ) . publish ( ) ;
137
+ Package :: new ( "direct" , "1.0.0" )
138
+ . dep ( "indirect" , "2.1" )
139
+ . publish ( ) ;
140
+ Package :: new ( "direct" , "1.1.0" )
141
+ . dep ( "indirect" , "2.1" )
142
+ . publish ( ) ;
143
+
144
+ let p = project ( )
145
+ . file (
146
+ "Cargo.toml" ,
147
+ r#"
148
+ [package]
149
+ name = "foo"
150
+ authors = []
151
+ version = "0.0.1"
152
+
153
+ [dependencies]
154
+ direct = "1.0"
155
+ "# ,
156
+ )
157
+ . file ( "src/main.rs" , "fn main() {}" )
158
+ . build ( ) ;
159
+
160
+ p. cargo ( "generate-lockfile -Zminimal-versions" )
161
+ . masquerade_as_nightly_cargo ( & [ "minimal-versions" ] )
162
+ . run ( ) ;
163
+
164
+ let lock = p. read_lockfile ( ) ;
165
+
166
+ assert ! (
167
+ lock. contains( "1.0.0" ) ,
168
+ "direct minimal version must be present"
169
+ ) ;
170
+ assert ! (
171
+ !lock. contains( "1.1.0" ) ,
172
+ "direct maximimal version cannot be present"
173
+ ) ;
174
+ assert ! (
175
+ !lock. contains( "2.0.0" ) ,
176
+ "indirect unmatched version cannot be present"
177
+ ) ;
178
+ assert ! (
179
+ lock. contains( "2.1.0" ) ,
180
+ "indirect minimal version must be present"
181
+ ) ;
182
+ assert ! (
183
+ !lock. contains( "2.2.0" ) ,
184
+ "indirect maximimal version cannot be present"
185
+ ) ;
186
+ }
187
+
188
+ #[ cargo_test]
189
+ fn indirect_conflict ( ) {
190
+ Package :: new ( "indirect" , "2.0.0" ) . publish ( ) ;
191
+ Package :: new ( "indirect" , "2.1.0" ) . publish ( ) ;
192
+ Package :: new ( "indirect" , "2.2.0" ) . publish ( ) ;
193
+ Package :: new ( "direct" , "1.0.0" )
194
+ . dep ( "indirect" , "2.1" )
195
+ . publish ( ) ;
196
+ Package :: new ( "direct" , "1.1.0" )
197
+ . dep ( "indirect" , "2.1" )
198
+ . publish ( ) ;
199
+
200
+ let p = project ( )
201
+ . file (
202
+ "Cargo.toml" ,
203
+ r#"
204
+ [package]
205
+ name = "foo"
206
+ authors = []
207
+ version = "0.0.1"
208
+
209
+ [dependencies]
210
+ direct = "1.0"
211
+ indirect = "2.0"
212
+ "# ,
213
+ )
214
+ . file ( "src/main.rs" , "fn main() {}" )
215
+ . build ( ) ;
216
+
217
+ p. cargo ( "generate-lockfile -Zminimal-versions" )
218
+ . masquerade_as_nightly_cargo ( & [ "minimal-versions" ] )
219
+ . with_stderr (
220
+ "\
221
+ [UPDATING] [..]
222
+ " ,
223
+ )
224
+ . run ( ) ;
225
+
226
+ let lock = p. read_lockfile ( ) ;
227
+
228
+ assert ! (
229
+ lock. contains( "1.0.0" ) ,
230
+ "direct minimal version must be present"
231
+ ) ;
232
+ assert ! (
233
+ !lock. contains( "1.1.0" ) ,
234
+ "direct maximimal version cannot be present"
235
+ ) ;
236
+ assert ! (
237
+ !lock. contains( "2.0.0" ) ,
238
+ "indirect unmatched version cannot be present"
239
+ ) ;
240
+ assert ! (
241
+ lock. contains( "2.1.0" ) ,
242
+ "indirect minimal version must be present"
243
+ ) ;
244
+ assert ! (
245
+ !lock. contains( "2.2.0" ) ,
246
+ "indirect maximimal version cannot be present"
247
+ ) ;
38
248
}
0 commit comments