@@ -561,4 +561,156 @@ final class SwiftPMIntegrationTests: XCTestCase {
561561      return  location. range. lowerBound ==  Position ( line:  3 ,  utf16index:  4 ) 
562562    } 
563563  } 
564+ 
565+   func  testChangePackageManifestFile( )  async  throws  { 
566+     let  project  =  try await  SwiftPMTestProject ( 
567+       files:  [ 
568+         " Lib.swift " :  """ 
569+         #if MY_FLAG 
570+         #error( " MY_FLAG set " ) 
571+         #else 
572+         #error( " MY_FLAG not set " ) 
573+         #endif 
574+          """ 
575+       ] , 
576+       manifest:  """ 
577+         // swift-tools-version: 5.7 
578+         import PackageDescription 
579+         let package = Package( 
580+           name:  " MyLibrary " , 
581+           targets: [.target(name:  " MyLibrary " )] 
582+         ) 
583+          """ 
584+     ) 
585+ 
586+     let  ( uri,  _)  =  try . openDocument ( " Lib.swift " ) 
587+     let  initialDiagnostics  =  try await  project. testClient. send ( 
588+       DocumentDiagnosticsRequest ( textDocument:  TextDocumentIdentifier ( uri) ) 
589+     ) 
590+     XCTAssertEqual ( initialDiagnostics. fullReport? . items. map ( \. message) ,  [ " MY_FLAG not set " ] ) 
591+ 
592+     try await  project. changeFileOnDisk ( 
593+       " Package.swift " , 
594+       newMarkedContents:  """ 
595+         // swift-tools-version: 5.7 
596+         import PackageDescription 
597+         let package = Package( 
598+           name:  " MyLibrary " , 
599+           targets: [.target(name:  " MyLibrary " , swiftSettings: [.define( " MY_FLAG " )])] 
600+         ) 
601+          """ 
602+     ) 
603+     try await  repeatUntilExpectedResult  { 
604+       let  diagnosticsAfterUpdate  =  try await  project. testClient. send ( 
605+         DocumentDiagnosticsRequest ( textDocument:  TextDocumentIdentifier ( uri) ) 
606+       ) 
607+       return  diagnosticsAfterUpdate. fullReport? . items. map ( \. message)  ==  [ " MY_FLAG set " ] 
608+     } 
609+   } 
610+ 
611+   func  testChangeVersionSpecificPackageManifestFile( )  async  throws  { 
612+     let  project  =  try await  SwiftPMTestProject ( 
613+       files:  [ 
614+         " Lib.swift " :  """ 
615+         #if MY_FLAG 
616+         #error( " MY_FLAG set " ) 
617+         #elseif MY_OTHER_FLAG 
618+         #error( " MY_OTHER_FLAG set " ) 
619+         #else 
620+         #error( " no flag set " ) 
621+         #endif 
622+          """ , 
623+         " /Package@swift-6.1.swift " :  """ 
624+         // swift-tools-version: 6.1 
625+         import PackageDescription 
626+         let package = Package( 
627+           name:  " MyLibrary " , 
628+           targets: [.target(name:  " MyLibrary " , swiftSettings: [.define( " MY_FLAG " )])] 
629+         ) 
630+          """ , 
631+       ] , 
632+       manifest:  """ 
633+         // swift-tools-version: 5.7 
634+         import PackageDescription 
635+         let package = Package( 
636+           name:  " MyLibrary " , 
637+           targets: [.target(name:  " MyLibrary " )] 
638+         ) 
639+          """ 
640+     ) 
641+ 
642+     let  ( uri,  _)  =  try . openDocument ( " Lib.swift " ) 
643+     let  initialDiagnostics  =  try await  project. testClient. send ( 
644+       DocumentDiagnosticsRequest ( textDocument:  TextDocumentIdentifier ( uri) ) 
645+     ) 
646+     XCTAssertEqual ( initialDiagnostics. fullReport? . items. map ( \. message) ,  [ " MY_FLAG set " ] ) 
647+ 
648+     try await  project. changeFileOnDisk ( 
649+       " Package@swift-6.1.swift " , 
650+       newMarkedContents:  """ 
651+         // swift-tools-version: 6.1 
652+         import PackageDescription 
653+         let package = Package( 
654+           name:  " MyLibrary " , 
655+           targets: [.target(name:  " MyLibrary " , swiftSettings: [.define( " MY_OTHER_FLAG " )])] 
656+         ) 
657+          """ 
658+     ) 
659+     try await  repeatUntilExpectedResult  { 
660+       let  diagnosticsAfterUpdate  =  try await  project. testClient. send ( 
661+         DocumentDiagnosticsRequest ( textDocument:  TextDocumentIdentifier ( uri) ) 
662+       ) 
663+       return  diagnosticsAfterUpdate. fullReport? . items. map ( \. message)  ==  [ " MY_OTHER_FLAG set " ] 
664+     } 
665+   } 
666+ 
667+   func  testAddVersionSpecificPackageManifestFile( )  async  throws  { 
668+     let  project  =  try await  SwiftPMTestProject ( 
669+       files:  [ 
670+         " Lib.swift " :  """ 
671+         #if MY_FLAG 
672+         #error( " MY_FLAG set " ) 
673+         #else 
674+         #error( " MY_FLAG not set " ) 
675+         #endif 
676+          """ 
677+       ] , 
678+       manifest:  """ 
679+         // swift-tools-version: 5.7 
680+         import PackageDescription 
681+         let package = Package( 
682+           name:  " MyLibrary " , 
683+           targets: [.target(name:  " MyLibrary " )] 
684+         ) 
685+          """ 
686+     ) 
687+ 
688+     let  ( uri,  _)  =  try . openDocument ( " Lib.swift " ) 
689+     let  initialDiagnostics  =  try await  project. testClient. send ( 
690+       DocumentDiagnosticsRequest ( textDocument:  TextDocumentIdentifier ( uri) ) 
691+     ) 
692+     XCTAssertEqual ( initialDiagnostics. fullReport? . items. map ( \. message) ,  [ " MY_FLAG not set " ] ) 
693+ 
694+     let  versionSpecificManifestUrl  =  project. scratchDirectory. appending ( component:  " Package@swift-6.1.swift " ) 
695+     try await  """ 
696+     // swift-tools-version: 6.1 
697+     import PackageDescription 
698+     let package = Package( 
699+       name:  " MyLibrary " , 
700+       targets: [.target(name:  " MyLibrary " , swiftSettings: [.define( " MY_FLAG " )])] 
701+     ) 
702+      """ . writeWithRetry ( to:  versionSpecificManifestUrl) 
703+ 
704+     project. testClient. send ( 
705+       DidChangeWatchedFilesNotification ( changes:  [ 
706+         FileEvent ( uri:  DocumentURI ( versionSpecificManifestUrl) ,  type:  . created) 
707+       ] ) 
708+     ) 
709+     try await  repeatUntilExpectedResult  { 
710+       let  diagnosticsAfterUpdate  =  try await  project. testClient. send ( 
711+         DocumentDiagnosticsRequest ( textDocument:  TextDocumentIdentifier ( uri) ) 
712+       ) 
713+       return  diagnosticsAfterUpdate. fullReport? . items. map ( \. message)  ==  [ " MY_FLAG set " ] 
714+     } 
715+   } 
564716} 
0 commit comments