@@ -454,4 +454,49 @@ class PackageDescription5LoadingTests: XCTestCase {
454
454
XCTAssertEqual ( resources [ 1 ] , TargetDescription . Resource ( rule: . process, path: " bar.txt " ) )
455
455
}
456
456
}
457
+
458
+ func testWindowsPlatform( ) throws {
459
+ let stream = BufferedOutputByteStream ( )
460
+ stream <<< """
461
+ import PackageDescription
462
+ let package = Package(
463
+ name: " Foo " ,
464
+ targets: [
465
+ .target(
466
+ name: " foo " ,
467
+ cSettings: [
468
+ .define( " LLVM_ON_WIN32 " , .when(platforms: [.windows])),
469
+ ]
470
+ ),
471
+ ]
472
+ )
473
+ """
474
+
475
+ do {
476
+ try loadManifestThrowing ( stream. bytes) { _ in }
477
+ XCTFail ( " Unexpected success " )
478
+ } catch {
479
+ guard case let ManifestParseError . invalidManifestFormat( message, _) = error else {
480
+ return XCTFail ( " \( error) " )
481
+ }
482
+
483
+ XCTAssertMatch ( message, . contains( " is unavailable " ) )
484
+ XCTAssertMatch ( message, . contains( " was introduced in PackageDescription 5.2 " ) )
485
+ }
486
+
487
+ loadManifest ( stream. bytes, toolsVersion: . v5_2) { manifest in
488
+ XCTAssertEqual ( manifest. name, " Foo " )
489
+
490
+ // Check targets.
491
+ let targets = Dictionary ( items:
492
+ manifest. targets. map ( { ( $0. name, $0 as TargetDescription ) } ) )
493
+ let foo = targets [ " foo " ] !
494
+ XCTAssertEqual ( foo. name, " foo " )
495
+ XCTAssertFalse ( foo. isTest)
496
+ XCTAssertEqual ( foo. dependencies, [ ] )
497
+
498
+ let settings = manifest. targets [ 0 ] . settings
499
+ XCTAssertEqual ( settings [ 0 ] , . init( tool: . c, name: . define, value: [ " LLVM_ON_WIN32 " ] , condition: . init( platformNames: [ " windows " ] ) ) )
500
+ }
501
+ }
457
502
}
0 commit comments