@@ -16,6 +16,15 @@ describe('Providable', () => {
1616 }
1717 window . customElements . define ( 'providable-provider-test' , ProvidableProviderTest )
1818
19+ @providable
20+ class ProvidableSomeProviderTest extends HTMLElement {
21+ @provide foo = 'greetings'
22+ bar = 'universe'
23+ baz = 18
24+ @provide qux = 42
25+ }
26+ window . customElements . define ( 'providable-some-provider-test' , ProvidableSomeProviderTest )
27+
1928 @providable
2029 class ProvidableConsumerTest extends HTMLElement {
2130 @consume foo = 'goodbye'
@@ -225,6 +234,49 @@ describe('Providable', () => {
225234 } )
226235 } )
227236
237+ describe ( 'consumer with nested provider parents' , ( ) => {
238+ let provider : ProvidableProviderTest
239+ let someProvider : ProvidableSomeProviderTest
240+ let consumer : ProvidableConsumerTest
241+ beforeEach ( async ( ) => {
242+ provider = await fixture ( html `< providable-provider-test >
243+ < main >
244+ < article >
245+ < providable-some-provider-test >
246+ < section >
247+ < div >
248+ < providable-consumer-test > </ providable-consumer-test >
249+ </ div >
250+ </ section >
251+ </ providable-some-provider-test >
252+ </ article >
253+ </ main >
254+ </ providable-provider-test > ` )
255+ someProvider = provider . querySelector < ProvidableSomeProviderTest > ( 'providable-some-provider-test' ) !
256+ consumer = provider . querySelector < ProvidableConsumerTest > ( 'providable-consumer-test' ) !
257+ } )
258+
259+ it ( 'only recieves provider responses from first matching provider' , ( ) => {
260+ expect ( consumer ) . to . have . property ( 'foo' , 'greetings' )
261+ expect ( consumer ) . to . have . property ( 'bar' , 'world' )
262+ expect ( consumer ) . to . have . property ( 'baz' , 3 )
263+ expect ( consumer ) . to . have . property ( sym ) . eql ( { provided : true } )
264+ expect ( consumer ) . to . have . property ( 'qux' ) . eql ( 42 )
265+ expect ( consumer ) . to . have . property ( 'count' ) . eql ( 1 )
266+ } )
267+
268+ it ( 'only updates on appropriate provider changing values' , ( ) => {
269+ expect ( consumer ) . to . have . property ( 'qux' ) . eql ( 42 )
270+ expect ( consumer ) . to . have . property ( 'count' ) . eql ( 1 )
271+ provider . qux = 12
272+ expect ( consumer ) . to . have . property ( 'qux' ) . eql ( 42 )
273+ expect ( consumer ) . to . have . property ( 'count' ) . eql ( 1 )
274+ someProvider . qux = 88
275+ expect ( consumer ) . to . have . property ( 'qux' ) . eql ( 88 )
276+ expect ( consumer ) . to . have . property ( 'count' ) . eql ( 2 )
277+ } )
278+ } )
279+
228280 describe ( 'error scenarios' , ( ) => {
229281 it ( 'cannot decorate methods as providers' , ( ) => {
230282 expect ( ( ) => {
0 commit comments