@@ -76,13 +76,10 @@ fn update_pre_release() {
76
76
}
77
77
78
78
#[ cargo_test]
79
- fn update_pre_release_differ ( ) {
79
+ fn pre_release_should_unmatched ( ) {
80
80
cargo_test_support:: registry:: init ( ) ;
81
81
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 ( ) ;
86
83
let p = project ( )
87
84
. file (
88
85
"Cargo.toml" ,
@@ -95,7 +92,11 @@ fn update_pre_release_differ() {
95
92
)
96
93
. file ( "src/lib.rs" , "" )
97
94
. 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\" " ) ) ;
98
98
99
+ cargo_test_support:: registry:: Package :: new ( "my-dependency" , "0.1.2-pre.0" ) . publish ( ) ;
99
100
p. cargo ( "update -p my-dependency --precise 0.1.2-pre.0 -Zunstable-options" )
100
101
. masquerade_as_nightly_cargo ( & [ "precise-pre-release" ] )
101
102
. with_stderr_data ( str![ [ r#"
@@ -105,15 +106,75 @@ fn update_pre_release_differ() {
105
106
"# ] ] )
106
107
. run ( ) ;
107
108
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" )
109
170
. masquerade_as_nightly_cargo ( & [ "precise-pre-release" ] )
110
171
. with_stderr_data ( str![ [ r#"
111
172
[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
113
174
114
175
"# ] ] )
115
176
. run ( ) ;
116
177
117
178
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\" " ) ) ;
119
180
}
0 commit comments