@@ -76,13 +76,10 @@ fn update_pre_release() {
7676}
7777
7878#[ cargo_test]
79- fn update_pre_release_differ ( ) {
79+ fn pre_release_should_unmatched ( ) {
8080 cargo_test_support:: registry:: init ( ) ;
8181
82- for version in [ "0.1.2" , "0.1.2-pre.0" , "0.1.2-pre.1" ] {
83- cargo_test_support:: registry:: Package :: new ( "my-dependency" , version) . publish ( ) ;
84- }
85-
82+ cargo_test_support:: registry:: Package :: new ( "my-dependency" , "0.1.2" ) . publish ( ) ;
8683 let p = project ( )
8784 . file (
8885 "Cargo.toml" ,
@@ -95,7 +92,11 @@ fn update_pre_release_differ() {
9592 )
9693 . file ( "src/lib.rs" , "" )
9794 . build ( ) ;
95+ p. cargo ( "generate-lockfile" ) . run ( ) ;
96+ let lockfile = p. read_lockfile ( ) ;
97+ assert ! ( lockfile. contains( "\n name = \" my-dependency\" \n version = \" 0.1.2\" " ) ) ;
9898
99+ cargo_test_support:: registry:: Package :: new ( "my-dependency" , "0.1.2-pre.0" ) . publish ( ) ;
99100 p. cargo ( "update -p my-dependency --precise 0.1.2-pre.0 -Zunstable-options" )
100101 . masquerade_as_nightly_cargo ( & [ "precise-pre-release" ] )
101102 . with_stderr_data ( str![ [ r#"
@@ -105,15 +106,75 @@ fn update_pre_release_differ() {
105106"# ] ] )
106107 . run ( ) ;
107108
108- p. cargo ( "update -p my-dependency --precise 0.1.2-pre.1 -Zunstable-options" )
109+ cargo_test_support:: registry:: Package :: new ( "my-dependency" , "0.2.0-0" ) . publish ( ) ;
110+ p. cargo ( "update -p my-dependency --precise 0.2.0-0 -Zunstable-options" )
111+ . masquerade_as_nightly_cargo ( & [ "precise-pre-release" ] )
112+ . with_status ( 101 )
113+ . with_stderr_data ( str![ [ r#"
114+ [UPDATING] `dummy-registry` index
115+ [ERROR] failed to select a version for the requirement `my-dependency = "^0.1.2"`
116+ candidate versions found which didn't match: 0.2.0-0
117+ location searched: `dummy-registry` index (which is replacing registry `crates-io`)
118+ required by package `package v0.0.0 ([ROOT]/foo)`
119+ if you are looking for the prerelease package it needs to be specified explicitly
120+ my-dependency = { version = "0.2.0-0" }
121+ perhaps a crate was updated and forgotten to be re-vendored?
122+
123+ "# ] ] )
124+ . run ( ) ;
125+
126+ let lockfile = p. read_lockfile ( ) ;
127+ assert ! ( lockfile. contains( "\n name = \" my-dependency\" \n version = \" 0.1.2-pre.0\" " ) ) ;
128+ }
129+
130+ #[ cargo_test]
131+ fn pre_release_should_matched ( ) {
132+ cargo_test_support:: registry:: init ( ) ;
133+
134+ cargo_test_support:: registry:: Package :: new ( "my-dependency" , "0.1.2" ) . publish ( ) ;
135+ let p = project ( )
136+ . file (
137+ "Cargo.toml" ,
138+ r#"
139+ [package]
140+ name = "package"
141+ [dependencies]
142+ my-dependency = "0.1.2"
143+ "# ,
144+ )
145+ . file ( "src/lib.rs" , "" )
146+ . build ( ) ;
147+ p. cargo ( "generate-lockfile" ) . run ( ) ;
148+ let lockfile = p. read_lockfile ( ) ;
149+ assert ! ( lockfile. contains( "\n name = \" my-dependency\" \n version = \" 0.1.2\" " ) ) ;
150+
151+ // Test upgrade
152+ // 0.1.3 is in the range, so it match
153+ cargo_test_support:: registry:: Package :: new ( "my-dependency" , "0.1.3" ) . publish ( ) ;
154+ p. cargo ( "update -p my-dependency --precise 0.1.3 -Zunstable-options" )
155+ . masquerade_as_nightly_cargo ( & [ "precise-pre-release" ] )
156+ . with_stderr_data ( str![ [ r#"
157+ [UPDATING] `dummy-registry` index
158+ [UPDATING] my-dependency v0.1.2 -> v0.1.3
159+
160+ "# ] ] )
161+ . run ( ) ;
162+
163+ let lockfile = p. read_lockfile ( ) ;
164+ assert ! ( lockfile. contains( "\n name = \" my-dependency\" \n version = \" 0.1.3\" " ) ) ;
165+
166+ // Test downgrade
167+ // v0.1.3-pre.1 is in the range, so it match
168+ cargo_test_support:: registry:: Package :: new ( "my-dependency" , "0.1.3-pre.1" ) . publish ( ) ;
169+ p. cargo ( "update -p my-dependency --precise 0.1.3-pre.1 -Zunstable-options" )
109170 . masquerade_as_nightly_cargo ( & [ "precise-pre-release" ] )
110171 . with_stderr_data ( str![ [ r#"
111172[UPDATING] `dummy-registry` index
112- [UPDATING ] my-dependency v0.1.2-pre.0 -> v0.1.2 -pre.1
173+ [DOWNGRADING ] my-dependency v0.1.3 -> v0.1.3 -pre.1
113174
114175"# ] ] )
115176 . run ( ) ;
116177
117178 let lockfile = p. read_lockfile ( ) ;
118- assert ! ( lockfile. contains( "\n name = \" my-dependency\" \n version = \" 0.1.2 -pre.1\" " ) ) ;
179+ assert ! ( lockfile. contains( "\n name = \" my-dependency\" \n version = \" 0.1.3 -pre.1\" " ) ) ;
119180}
0 commit comments