1- use crate :: support:: sandbox:: { sandbox, DistroMetadata , NodeFixture , NpmFixture , Yarn1Fixture } ;
1+ use crate :: support:: sandbox:: {
2+ sandbox, DistroMetadata , NodeFixture , NpmFixture , Yarn1Fixture , YarnBerryFixture ,
3+ } ;
24use hamcrest2:: assert_that;
35use hamcrest2:: prelude:: * ;
46use test_support:: matchers:: execs;
@@ -160,6 +162,40 @@ const YARN_1_VERSION_FIXTURES: [DistroMetadata; 4] = [
160162 } ,
161163] ;
162164
165+ const YARN_BERRY_VERSION_INFO : & str = r#"{
166+ "name":"@yarnpkg/cli-dist",
167+ "dist-tags": { "latest":"3.12.99" },
168+ "versions": {
169+ "2.4.159": { "version":"2.4.159", "dist": { "shasum":"", "tarball":"" }},
170+ "3.2.42": { "version":"3.2.42", "dist": { "shasum":"", "tarball":"" }},
171+ "3.7.71": { "version":"3.7.71", "dist": { "shasum":"", "tarball":"" }},
172+ "3.12.99": { "version":"3.12.99", "dist": { "shasum":"", "tarball":"" }}
173+ }
174+ }"# ;
175+
176+ const YARN_BERRY_VERSION_FIXTURES : [ DistroMetadata ; 4 ] = [
177+ DistroMetadata {
178+ version : "2.4.159" ,
179+ compressed_size : 177 ,
180+ uncompressed_size : Some ( 0x0028_0000 ) ,
181+ } ,
182+ DistroMetadata {
183+ version : "3.12.99" ,
184+ compressed_size : 178 ,
185+ uncompressed_size : Some ( 0x0028_0000 ) ,
186+ } ,
187+ DistroMetadata {
188+ version : "3.7.71" ,
189+ compressed_size : 176 ,
190+ uncompressed_size : Some ( 0x0028_0000 ) ,
191+ } ,
192+ DistroMetadata {
193+ version : "3.2.42" ,
194+ compressed_size : 174 ,
195+ uncompressed_size : Some ( 0x0028_0000 ) ,
196+ } ,
197+ ] ;
198+
163199const NPM_VERSION_FIXTURES : [ DistroMetadata ; 3 ] = [
164200 DistroMetadata {
165201 version : "1.2.3" ,
@@ -282,7 +318,7 @@ fn force_bundled_npm() {
282318}
283319
284320#[ test]
285- fn command_line_yarn ( ) {
321+ fn command_line_yarn_1 ( ) {
286322 let s = sandbox ( )
287323 . node_available_versions ( NODE_VERSION_INFO )
288324 . distro_mocks :: < NodeFixture > ( & NODE_VERSION_FIXTURES )
@@ -300,7 +336,28 @@ fn command_line_yarn() {
300336}
301337
302338#[ test]
303- fn inherited_yarn ( ) {
339+ fn command_line_yarn_3 ( ) {
340+ let s = sandbox ( )
341+ . node_available_versions ( NODE_VERSION_INFO )
342+ . distro_mocks :: < NodeFixture > ( & NODE_VERSION_FIXTURES )
343+ . yarn_1_available_versions ( YARN_1_VERSION_INFO )
344+ . yarn_berry_available_versions ( YARN_BERRY_VERSION_INFO )
345+ . distro_mocks :: < Yarn1Fixture > ( & YARN_1_VERSION_FIXTURES )
346+ . distro_mocks :: < YarnBerryFixture > ( & YARN_BERRY_VERSION_FIXTURES )
347+ . env ( VOLTA_LOGLEVEL , "debug" )
348+ . env ( "VOLTA_FEATURE_YARN_3" , "true" )
349+ . build ( ) ;
350+
351+ assert_that ! (
352+ s. volta( "run --node 10.99.1040 --yarn 3.7.71 yarn --version" ) ,
353+ execs( )
354+ . with_status( ExitCode :: Success as i32 )
355+ . with_stderr_contains( "[..]Yarn: 3.7.71 from command-line configuration" )
356+ ) ;
357+ }
358+
359+ #[ test]
360+ fn inherited_yarn_1 ( ) {
304361 let s = sandbox ( )
305362 . node_available_versions ( NODE_VERSION_INFO )
306363 . distro_mocks :: < NodeFixture > ( & NODE_VERSION_FIXTURES )
@@ -318,6 +375,28 @@ fn inherited_yarn() {
318375 ) ;
319376}
320377
378+ #[ test]
379+ fn inherited_yarn_3 ( ) {
380+ let s = sandbox ( )
381+ . node_available_versions ( NODE_VERSION_INFO )
382+ . distro_mocks :: < NodeFixture > ( & NODE_VERSION_FIXTURES )
383+ . yarn_1_available_versions ( YARN_1_VERSION_INFO )
384+ . yarn_berry_available_versions ( YARN_BERRY_VERSION_INFO )
385+ . distro_mocks :: < Yarn1Fixture > ( & YARN_1_VERSION_FIXTURES )
386+ . distro_mocks :: < YarnBerryFixture > ( & YARN_BERRY_VERSION_FIXTURES )
387+ . package_json ( & package_json_with_pinned_node_yarn ( "10.99.1040" , "3.2.42" ) )
388+ . env ( VOLTA_LOGLEVEL , "debug" )
389+ . env ( "VOLTA_FEATURE_YARN_3" , "true" )
390+ . build ( ) ;
391+
392+ assert_that ! (
393+ s. volta( "run --node 10.99.1040 yarn --version" ) ,
394+ execs( )
395+ . with_status( ExitCode :: Success as i32 )
396+ . with_stderr_contains( "[..]Yarn: 3.2.42 from project configuration" )
397+ ) ;
398+ }
399+
321400#[ test]
322401fn force_no_yarn ( ) {
323402 let s = sandbox ( )
0 commit comments