@@ -34,5 +34,172 @@ fn minimal_version_cli() {
34
34
35
35
let lock = p. read_lockfile ( ) ;
36
36
37
- assert ! ( !lock. contains( "1.1.0" ) ) ;
37
+ assert ! (
38
+ lock. contains( "1.0.0" ) ,
39
+ "dep minimal version must be present"
40
+ ) ;
41
+ assert ! (
42
+ !lock. contains( "1.1.0" ) ,
43
+ "dep maximimal version cannot be present"
44
+ ) ;
45
+ }
46
+
47
+ #[ cargo_test]
48
+ fn yanked ( ) {
49
+ Package :: new ( "dep" , "1.0.0" ) . yanked ( true ) . publish ( ) ;
50
+ Package :: new ( "dep" , "1.1.0" ) . publish ( ) ;
51
+ Package :: new ( "dep" , "1.2.0" ) . publish ( ) ;
52
+
53
+ let p = project ( )
54
+ . file (
55
+ "Cargo.toml" ,
56
+ r#"
57
+ [package]
58
+ name = "foo"
59
+ authors = []
60
+ version = "0.0.1"
61
+
62
+ [dependencies]
63
+ dep = "1.0"
64
+ "# ,
65
+ )
66
+ . file ( "src/main.rs" , "fn main() {}" )
67
+ . build ( ) ;
68
+
69
+ p. cargo ( "generate-lockfile -Zminimal-versions" )
70
+ . masquerade_as_nightly_cargo ( & [ "minimal-versions" ] )
71
+ . run ( ) ;
72
+
73
+ let lock = p. read_lockfile ( ) ;
74
+
75
+ assert ! (
76
+ lock. contains( "1.1.0" ) ,
77
+ "dep minimal version must be present"
78
+ ) ;
79
+ assert ! (
80
+ !lock. contains( "1.0.0" ) ,
81
+ "yanked minimal version must be skipped"
82
+ ) ;
83
+ assert ! (
84
+ !lock. contains( "1.2.0" ) ,
85
+ "dep maximimal version cannot be present"
86
+ ) ;
87
+ }
88
+
89
+ #[ cargo_test]
90
+ fn indirect ( ) {
91
+ Package :: new ( "indirect" , "2.0.0" ) . publish ( ) ;
92
+ Package :: new ( "indirect" , "2.1.0" ) . publish ( ) ;
93
+ Package :: new ( "indirect" , "2.2.0" ) . publish ( ) ;
94
+ Package :: new ( "direct" , "1.0.0" )
95
+ . dep ( "indirect" , "2.1" )
96
+ . publish ( ) ;
97
+ Package :: new ( "direct" , "1.1.0" )
98
+ . dep ( "indirect" , "2.1" )
99
+ . publish ( ) ;
100
+
101
+ let p = project ( )
102
+ . file (
103
+ "Cargo.toml" ,
104
+ r#"
105
+ [package]
106
+ name = "foo"
107
+ authors = []
108
+ version = "0.0.1"
109
+
110
+ [dependencies]
111
+ direct = "1.0"
112
+ "# ,
113
+ )
114
+ . file ( "src/main.rs" , "fn main() {}" )
115
+ . build ( ) ;
116
+
117
+ p. cargo ( "generate-lockfile -Zminimal-versions" )
118
+ . masquerade_as_nightly_cargo ( & [ "minimal-versions" ] )
119
+ . run ( ) ;
120
+
121
+ let lock = p. read_lockfile ( ) ;
122
+
123
+ assert ! (
124
+ lock. contains( "1.0.0" ) ,
125
+ "direct minimal version must be present"
126
+ ) ;
127
+ assert ! (
128
+ !lock. contains( "1.1.0" ) ,
129
+ "direct maximimal version cannot be present"
130
+ ) ;
131
+ assert ! (
132
+ !lock. contains( "2.0.0" ) ,
133
+ "indirect unmatched version cannot be present"
134
+ ) ;
135
+ assert ! (
136
+ lock. contains( "2.1.0" ) ,
137
+ "indirect minimal version must be present"
138
+ ) ;
139
+ assert ! (
140
+ !lock. contains( "2.2.0" ) ,
141
+ "indirect maximimal version cannot be present"
142
+ ) ;
143
+ }
144
+
145
+ #[ cargo_test]
146
+ fn indirect_conflict ( ) {
147
+ Package :: new ( "indirect" , "2.0.0" ) . publish ( ) ;
148
+ Package :: new ( "indirect" , "2.1.0" ) . publish ( ) ;
149
+ Package :: new ( "indirect" , "2.2.0" ) . publish ( ) ;
150
+ Package :: new ( "direct" , "1.0.0" )
151
+ . dep ( "indirect" , "2.1" )
152
+ . publish ( ) ;
153
+ Package :: new ( "direct" , "1.1.0" )
154
+ . dep ( "indirect" , "2.1" )
155
+ . publish ( ) ;
156
+
157
+ let p = project ( )
158
+ . file (
159
+ "Cargo.toml" ,
160
+ r#"
161
+ [package]
162
+ name = "foo"
163
+ authors = []
164
+ version = "0.0.1"
165
+
166
+ [dependencies]
167
+ direct = "1.0"
168
+ indirect = "2.0"
169
+ "# ,
170
+ )
171
+ . file ( "src/main.rs" , "fn main() {}" )
172
+ . build ( ) ;
173
+
174
+ p. cargo ( "generate-lockfile -Zminimal-versions" )
175
+ . masquerade_as_nightly_cargo ( & [ "minimal-versions" ] )
176
+ . with_stderr (
177
+ "\
178
+ [UPDATING] [..]
179
+ " ,
180
+ )
181
+ . run ( ) ;
182
+
183
+ let lock = p. read_lockfile ( ) ;
184
+
185
+ assert ! (
186
+ lock. contains( "1.0.0" ) ,
187
+ "direct minimal version must be present"
188
+ ) ;
189
+ assert ! (
190
+ !lock. contains( "1.1.0" ) ,
191
+ "direct maximimal version cannot be present"
192
+ ) ;
193
+ assert ! (
194
+ !lock. contains( "2.0.0" ) ,
195
+ "indirect unmatched version cannot be present"
196
+ ) ;
197
+ assert ! (
198
+ lock. contains( "2.1.0" ) ,
199
+ "indirect minimal version must be present"
200
+ ) ;
201
+ assert ! (
202
+ !lock. contains( "2.2.0" ) ,
203
+ "indirect maximimal version cannot be present"
204
+ ) ;
38
205
}
0 commit comments