@@ -34,5 +34,172 @@ fn minimal_version_cli() {
3434
3535 let lock = p. read_lockfile ( ) ;
3636
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+ ) ;
38205}
0 commit comments