@@ -318,8 +318,8 @@ final class PubgrubTests: XCTestCase {
318
318
XCTFail ( " Unexpected error: \( error) " )
319
319
case . success( let bindings) :
320
320
XCTAssertEqual ( bindings. count, 1 )
321
- let foo = bindings. first { $0. container . identity == PackageIdentity ( " foo " ) }
322
- XCTAssertEqual ( foo? . container . name, " bar " )
321
+ let foo = bindings. first { $0. package . identity == PackageIdentity ( " foo " ) }
322
+ XCTAssertEqual ( foo? . package . name, " bar " )
323
323
}
324
324
}
325
325
@@ -1096,6 +1096,72 @@ final class PubgrubTests: XCTestCase {
1096
1096
( " transitive " , . version( v1) )
1097
1097
] )
1098
1098
}
1099
+
1100
+ func testDelegate( ) {
1101
+ class TestDelegate : DependencyResolverDelegate {
1102
+ var events = [ String] ( )
1103
+ let lock = Lock ( )
1104
+
1105
+
1106
+ func willResolve( term: Term ) {
1107
+ self . lock. withLock {
1108
+ self . events. append ( " willResolve ' \( term. node. package . identity) ' " )
1109
+ }
1110
+ }
1111
+
1112
+ func didResolve( term: Term , version: Version ) {
1113
+ self . lock. withLock {
1114
+ self . events. append ( " didResolve ' \( term. node. package . identity) ' at ' \( version) ' " )
1115
+ }
1116
+ }
1117
+
1118
+ func derived( term: Term ) { }
1119
+
1120
+ func conflict( conflict: Incompatibility ) { }
1121
+
1122
+ func satisfied( term: Term , by: Assignment , incompatibility: Incompatibility ) { }
1123
+
1124
+ func partiallySatisfied( term: Term , by: Assignment , incompatibility: Incompatibility , difference: Term ) { }
1125
+
1126
+ func failedToResolve( incompatibility: Incompatibility ) { }
1127
+
1128
+ func computed( bindings: [ DependencyResolver . Binding ] ) {
1129
+ let decision = bindings. sorted ( by: { $0. package . identity < $1. package . identity } ) . map { " ' \( $0. package . identity) ' at ' \( $0. binding) ' " }
1130
+ self . lock. withLock {
1131
+ self . events. append ( " computed: \( decision. joined ( separator: " , " ) ) " )
1132
+ }
1133
+ }
1134
+ }
1135
+
1136
+ builder. serve ( " foo " , at: " 1.0.0 " )
1137
+ builder. serve ( " foo " , at: " 1.1.0 " )
1138
+ builder. serve ( " foo " , at: " 2.0.0 " )
1139
+ builder. serve ( " foo " , at: " 2.0.1 " )
1140
+
1141
+ builder. serve ( " bar " , at: " 1.0.0 " )
1142
+ builder. serve ( " bar " , at: " 1.1.0 " )
1143
+ builder. serve ( " bar " , at: " 2.0.0 " )
1144
+ builder. serve ( " bar " , at: " 2.0.1 " )
1145
+
1146
+ let delegate = TestDelegate ( )
1147
+ let resolver = builder. create ( delegate: delegate)
1148
+ let dependencies = builder. create ( dependencies: [
1149
+ " foo " : ( . versionSet( v1Range) , . specific( [ " foo " ] ) ) ,
1150
+ " bar " : ( . versionSet( v2Range) , . specific( [ " bar " ] ) ) ,
1151
+ ] )
1152
+ let result = resolver. solve ( constraints: dependencies)
1153
+
1154
+ AssertResult ( result, [
1155
+ ( " foo " , . version( " 1.1.0 " ) ) ,
1156
+ ( " bar " , . version( " 2.0.1 " ) ) ,
1157
+ ] )
1158
+
1159
+ XCTAssertTrue ( delegate. events. contains ( " willResolve 'foo' " ) , " \( delegate. events) " )
1160
+ XCTAssertTrue ( delegate. events. contains ( " didResolve 'foo' at '1.1.0' " ) , " \( delegate. events) " )
1161
+ XCTAssertTrue ( delegate. events. contains ( " willResolve 'bar' " ) , " \( delegate. events) " )
1162
+ XCTAssertTrue ( delegate. events. contains ( " didResolve 'bar' at '2.0.1' " ) , " \( delegate. events) " )
1163
+ XCTAssertTrue ( delegate. events. contains ( " computed: 'bar' at '2.0.1', 'foo' at '1.1.0' " ) , " \( delegate. events) " )
1164
+ }
1099
1165
}
1100
1166
1101
1167
final class PubGrubTestsBasicGraphs : XCTestCase {
@@ -1857,15 +1923,15 @@ private func AssertBindings(
1857
1923
let unexpectedBindings = bindings
1858
1924
. filter { binding in
1859
1925
packages. contains ( where: { pkg in
1860
- pkg. identity != binding. container . identity
1926
+ pkg. identity != binding. package . identity
1861
1927
} )
1862
1928
}
1863
- . map { $0. container . identity }
1929
+ . map { $0. package . identity }
1864
1930
1865
1931
XCTFail ( " Unexpected binding(s) found for \( unexpectedBindings. map { $0. description } . joined ( separator: " , " ) ) . " , file: file, line: line)
1866
1932
}
1867
1933
for package in packages {
1868
- guard let binding = bindings. first ( where: { $0. container . identity == package . identity } ) else {
1934
+ guard let binding = bindings. first ( where: { $0. package . identity == package . identity } ) else {
1869
1935
XCTFail ( " No binding found for \( package . identity) . " , file: file, line: line)
1870
1936
continue
1871
1937
}
@@ -1900,7 +1966,7 @@ private func AssertError(
1900
1966
) {
1901
1967
switch result {
1902
1968
case . success( let bindings) :
1903
- let bindingsDesc = bindings. map { " \( $0. container ) @ \( $0. binding) " } . joined ( separator: " , " )
1969
+ let bindingsDesc = bindings. map { " \( $0. package ) @ \( $0. binding) " } . joined ( separator: " , " )
1904
1970
XCTFail ( " Expected unresolvable graph, found bindings instead: \( bindingsDesc) " , file: file, line: line)
1905
1971
case . failure( let foundError) :
1906
1972
XCTAssertEqual ( String ( describing: foundError) , String ( describing: expectedError) , file: file, line: line)
@@ -2147,12 +2213,16 @@ class DependencyGraphBuilder {
2147
2213
}
2148
2214
2149
2215
func create( pinsMap: PinsStore . PinsMap = [ : ] , log: Bool = false ) -> PubgrubDependencyResolver {
2216
+ let delegate = log ? TracingDependencyResolverDelegate ( stream: stdoutStream) : nil
2217
+ return self . create ( pinsMap: pinsMap, delegate: delegate)
2218
+ }
2219
+
2220
+ func create( pinsMap: PinsStore . PinsMap = [ : ] , delegate: DependencyResolverDelegate ? ) -> PubgrubDependencyResolver {
2150
2221
defer {
2151
2222
self . containers = [ : ]
2152
2223
self . references = [ : ]
2153
2224
}
2154
2225
let provider = MockProvider ( containers: self . containers. values. map { $0 } )
2155
- let delegate = log ? TracingDependencyResolverDelegate ( stream: stdoutStream) : nil
2156
2226
return PubgrubDependencyResolver ( provider : provider, pinsMap: pinsMap, delegate: delegate)
2157
2227
}
2158
2228
}
0 commit comments