Use deferred acquisition consistently
This commit is contained in:
@@ -113,17 +113,22 @@ tasks: [{id: z-parent}]
|
||||
aIndependentPath := writeImportFile(t, directory, "a-independent.yml", "tasks: [{id: a-independent}]\n")
|
||||
bDependencyPath := writeImportFile(t, directory, "b-dependency.yml", "tasks: [{id: b-dependency}]\n")
|
||||
|
||||
sequencePolicy := mustCompileSequenceIdentityPolicy(t, []sequenceIdentityRegistration{{selector: sequenceIdentitySelector{literalSequenceSelector("tasks")}, identityFields: []string{"id"}}})
|
||||
input, diagnostics := testAcquireInput(inputAcquisitionRequest{
|
||||
input: loadInput{source: File(mainPath), imports: true}, role: sourceVersionMain,
|
||||
directiveContext: rootDirectiveContextImportsOnly,
|
||||
}, acquisitionPolicy{
|
||||
sequencePolicy: mustCompileSequenceIdentityPolicy(t, []sequenceIdentityRegistration{{selector: sequenceIdentitySelector{literalSequenceSelector("tasks")}, identityFields: []string{"id"}}}),
|
||||
sequencePolicy: sequencePolicy,
|
||||
importLimits: defaultImportLimits(),
|
||||
}, nil)
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatalf("assemble imports: %#v", diagnostics)
|
||||
}
|
||||
tasks, ok := documentAtPath(input.document, Keys("tasks"))
|
||||
composition, diagnostics := compositionForInputWithPolicy(input, sequencePolicy)
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatalf("compose acquired imports: %#v", diagnostics)
|
||||
}
|
||||
tasks, ok := documentAtPath(composition.root, Keys("tasks"))
|
||||
if !ok || tasks.Kind != document.Sequence {
|
||||
t.Fatalf("tasks document = %#v, %v", tasks, ok)
|
||||
}
|
||||
@@ -627,7 +632,7 @@ id: item
|
||||
accounting := &importAccounting{}
|
||||
input, diagnostics := testAcquireInput(inputAcquisitionRequest{
|
||||
input: loadInput{source: File(mainPath), imports: true, filesystem: &FilesystemContext{Root: directory}},
|
||||
role: sourceVersionMain, directiveContext: rootDirectiveContextImportsOnly, deferAssembly: true,
|
||||
role: sourceVersionMain, directiveContext: rootDirectiveContextImportsOnly,
|
||||
}, acquisitionPolicy{importLimits: defaultImportLimits()}, accounting)
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatalf("acquire input: %#v", diagnostics)
|
||||
@@ -683,6 +688,7 @@ func TestItemImportCanJoinAnAuthoredListUnderRegisteredComposition(t *testing.T)
|
||||
`)
|
||||
writeImportFile(t, directory, "item.yml", "configkit: {imports: [{path: helper.yml}]}\nname: imported\n")
|
||||
writeImportFile(t, directory, "helper.yml", "id: helper-id\n")
|
||||
sequencePolicy := mustCompileSequenceIdentityPolicy(t, []sequenceIdentityRegistration{{selector: sequenceIdentitySelector{literalSequenceSelector("items")}, identityFields: []string{"id"}}})
|
||||
input, diagnostics := testAcquireInput(inputAcquisitionRequest{
|
||||
input: loadInput{source: File(mainPath), imports: true}, role: sourceVersionMain,
|
||||
directiveContext: rootDirectiveContextImportsOnly,
|
||||
@@ -690,8 +696,12 @@ func TestItemImportCanJoinAnAuthoredListUnderRegisteredComposition(t *testing.T)
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatalf("assemble item import: %#v", diagnostics)
|
||||
}
|
||||
imported, diagnostics := compositionForInputWithPolicy(input, sequencePolicy)
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatalf("compose acquired item import: %#v", diagnostics)
|
||||
}
|
||||
authored := parseDocumentForDecode(t, "items: [{id: authored-id, name: authored}]\n")
|
||||
composed, diagnostics := composeDocumentsWithPolicy(mustCompileSequenceIdentityPolicy(t, []sequenceIdentityRegistration{{selector: sequenceIdentitySelector{literalSequenceSelector("items")}, identityFields: []string{"id"}}}), authored, input.document)
|
||||
composed, diagnostics := composeDocumentsWithPolicy(sequencePolicy, authored, imported.root)
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatalf("compose authored and imported lists: %#v", diagnostics)
|
||||
}
|
||||
@@ -998,10 +1008,10 @@ func TestItemAcquisitionRetainsInclusionGraphAndScopeOwnership(t *testing.T) {
|
||||
break
|
||||
}
|
||||
}
|
||||
if item == nil || item.identity != graph.nodes[1].key || item.scopeOwner != rootScope.owner || item.nested == nil {
|
||||
if item == nil || item.identity != graph.nodes[1].key || item.scopeOwner != rootScope.owner || item.pendingItem == nil {
|
||||
t.Fatalf("outer item contribution = %#v", item)
|
||||
}
|
||||
itemScope := item.nested.acquisition[0]
|
||||
itemScope := item.pendingItem
|
||||
if itemScope.owner != item.identity || len(itemScope.contributions) != 2 {
|
||||
t.Fatalf("nested item scope = %#v", itemScope)
|
||||
}
|
||||
@@ -1190,8 +1200,12 @@ func TestItemHelperScopeScheduleInterleavesUnequalBranches(t *testing.T) {
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatalf("assemble item scope: %#v", diagnostics)
|
||||
}
|
||||
composition, diagnostics := compositionForInputWithPolicy(input, sequencePolicy{})
|
||||
if len(diagnostics) != 0 {
|
||||
t.Fatalf("compose acquired item scope: %#v", diagnostics)
|
||||
}
|
||||
var nested *composedDocument
|
||||
for _, contribution := range input.composition.acquisition[0].contributions {
|
||||
for _, contribution := range composition.acquisition[0].contributions {
|
||||
if contribution.role == importRoleItem {
|
||||
nested = contribution.nested
|
||||
break
|
||||
@@ -1398,15 +1412,15 @@ func TestImportDepthBudgetCountsSelectedEdges(t *testing.T) {
|
||||
limits.depth = 1
|
||||
main := parseImportMain(t, mainPath)
|
||||
request := testImportRequest(File(mainPath), nil, main, Path{}, nil, nil)
|
||||
composed, sources, diagnostics := testAcquireImportWithLimits(request, limits)
|
||||
acquired, sources, diagnostics := testAcquireImportWithLimits(request, limits)
|
||||
if test.code != "" {
|
||||
if len(diagnostics) != 1 || diagnostics[0].Code != test.code {
|
||||
t.Fatalf("diagnostics = %#v, want %s", diagnostics, test.code)
|
||||
}
|
||||
return
|
||||
}
|
||||
if len(diagnostics) != 0 || composed == nil || len(sources) != 2 {
|
||||
t.Fatalf("depth-boundary composition: sources=%#v diagnostics=%#v", sources, diagnostics)
|
||||
if len(diagnostics) != 0 || acquired == nil || len(acquired.acquisition) == 0 || len(sources) != 2 {
|
||||
t.Fatalf("depth-boundary acquisition: sources=%#v diagnostics=%#v", sources, diagnostics)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -1429,9 +1443,9 @@ func TestImportTraversalAcceptsExactPrivateBudgets(t *testing.T) {
|
||||
nodes: countInputNodes(main.document) + countInputNodes(imported.document),
|
||||
}
|
||||
request := testImportRequest(File(mainPath), nil, main, Path{}, nil, nil)
|
||||
composed, sources, diagnostics := testAcquireImportWithLimits(request, limits)
|
||||
if len(diagnostics) != 0 || composed == nil || len(sources) != 2 {
|
||||
t.Fatalf("exact-limit composition = (%#v, %#v, %#v)", composed, sources, diagnostics)
|
||||
acquired, sources, diagnostics := testAcquireImportWithLimits(request, limits)
|
||||
if len(diagnostics) != 0 || acquired == nil || len(acquired.acquisition) == 0 || len(sources) != 2 {
|
||||
t.Fatalf("exact-limit acquisition = (%#v, %#v, %#v)", acquired, sources, diagnostics)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1516,6 +1530,14 @@ func testAcquireImport(request importAcquisitionRequest, policy acquisitionPolic
|
||||
return composition, sources, diagnostics
|
||||
}
|
||||
|
||||
func testComposeAcquiredImport(request importAcquisitionRequest, policy acquisitionPolicy, state *acquisitionState, acquired *composedDocument, sources []SourceInfo) (*composedDocument, []Diagnostic) {
|
||||
input := assembledInput{
|
||||
parsed: request.main, composition: acquired, acquisition: cloneAcquisitionScopes(acquired.acquisition),
|
||||
sources: sources, versionState: state.versionState, accounting: state.accounting,
|
||||
}
|
||||
return composeAcquiredInputWithPolicies(input, collectionPolicyScope{}, policy.sequencePolicy)
|
||||
}
|
||||
|
||||
func testAcquireImportWithLimits(request importAcquisitionRequest, limits importLimits) (*composedDocument, []SourceInfo, []Diagnostic) {
|
||||
return testAcquireImport(request, acquisitionPolicy{importLimits: limits}, &acquisitionState{accounting: &importAccounting{}}, &tierAcquisitionState{})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user