Skip to content

Commit

Permalink
fix($resolve): Resolves only inherit from immediate parent
Browse files Browse the repository at this point in the history
fixes #702
  • Loading branch information
asperry152 committed Jul 19, 2014
1 parent 5e88789 commit df34e20
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/resolve.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ function $Resolve( $q, $injector) {
if (!merged) merge(values, parent.$$values);
result.$$values = values;
result.$$promises = true; // keep for isResolve()
delete result.$$inheritedValues;
resolution.resolve(values);
}
}
Expand All @@ -117,12 +118,20 @@ function $Resolve( $q, $injector) {
return result;
}

if (parent.$$inheritedValues) {
merge(values, parent.$$inheritedValues);
}

// Merge parent values if the parent has already resolved, or merge
// parent promises and wait if the parent resolve is still in progress.
if (parent.$$values) {
merged = merge(values, parent.$$values);
result.$$inheritedValues = parent.$$values;
done();
} else {
if (parent.$$inheritedValues) {
result.$$inheritedValues = parent.$$inheritedValues;
}
extend(promises, parent.$$promises);
parent.then(done, fail);
}
Expand Down
22 changes: 22 additions & 0 deletions test/resolveSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,28 @@ describe("resolve", function () {
expect(b.mostRecentCall.args).toEqual([ 'aa' ]);
});

it("allow access to ancestor resolves in descendent resolve blocks", inject(function ($q) {
var gPromise = $q.defer(),
gInjectable = jasmine.createSpy('gInjectable').andReturn(gPromise.promise),
pPromise = $q.defer(),
pInjectable = jasmine.createSpy('pInjectable').andReturn(pPromise.promise);

var g = $r.resolve({ gP: [ gInjectable ] }, g);

gPromise.resolve('grandparent');
tick();

var s = jasmine.createSpy('s');
var p = $r.resolve({ p: [ pInjectable ] }, g);
var c = $r.resolve({ c: [ 'p', 'gP', s ] }, p);

pPromise.resolve('parent');
tick();

expect(s).toHaveBeenCalled();
expect(s.mostRecentCall.args).toEqual([ 'parent', 'grandparent' ]);
}));

it("allows a function to override a parent value of the same name", function () {
var r = $r.resolve({ b: function() { return 'B' } });
var s = $r.resolve({
Expand Down

0 comments on commit df34e20

Please sign in to comment.