@@ -8,7 +8,8 @@ import {OverlayState} from './overlay-state';
88import { OverlayRef } from './overlay-ref' ;
99import { PositionStrategy } from './position/position-strategy' ;
1010import { OverlayModule } from './overlay-directives' ;
11- import { ScrollStrategy } from './scroll/scroll-strategy' ;
11+ import { ScrollStrategy , ScrollStrategyOptions , ScrollDispatcher } from './scroll/index' ;
12+ import { ViewportRuler } from './position/viewport-ruler' ;
1213
1314
1415describe ( 'Overlay' , ( ) => {
@@ -22,10 +23,20 @@ describe('Overlay', () => {
2223 TestBed . configureTestingModule ( {
2324 imports : [ OverlayModule , PortalModule , OverlayTestModule ] ,
2425 providers : [
25- { provide : OverlayContainer , useFactory : ( ) => {
26- overlayContainerElement = document . createElement ( 'div' ) ;
27- return { getContainerElement : ( ) => overlayContainerElement } ;
28- } }
26+ ScrollDispatcher ,
27+ ViewportRuler ,
28+ {
29+ provide : ScrollStrategyOptions ,
30+ useClass : ScrollStrategyOptionsOverride ,
31+ deps : [ ScrollDispatcher , ViewportRuler ]
32+ } ,
33+ {
34+ provide : OverlayContainer ,
35+ useFactory : ( ) => {
36+ overlayContainerElement = document . createElement ( 'div' ) ;
37+ return { getContainerElement : ( ) => overlayContainerElement } ;
38+ }
39+ }
2940 ]
3041 } ) . compileComponents ( ) ;
3142 } ) ) ;
@@ -337,51 +348,30 @@ describe('Overlay', () => {
337348 describe ( 'scroll strategy' , ( ) => {
338349 let fakeScrollStrategy : FakeScrollStrategy ;
339350 let config : OverlayState ;
340-
341- class FakeScrollStrategy implements ScrollStrategy {
342- isEnabled = false ;
343- overlayRef : OverlayRef ;
344-
345- constructor ( ) {
346- fakeScrollStrategy = this ;
347- }
348-
349- attach ( overlayRef : OverlayRef ) {
350- this . overlayRef = overlayRef ;
351- }
352-
353- enable ( ) {
354- this . isEnabled = true ;
355- }
356-
357- disable ( ) {
358- this . isEnabled = false ;
359- }
360- }
351+ let overlayRef : OverlayRef ;
361352
362353 beforeEach ( ( ) => {
354+ } ) ;
355+
356+ beforeEach ( inject ( [ ScrollStrategyOptions ] , ( scrollOptions : ScrollStrategyOptionsOverride ) => {
363357 config = new OverlayState ( ) ;
364- overlay . registerScrollStrategy ( 'fake' , FakeScrollStrategy ) ;
365358 config . scrollStrategy = 'fake' ;
366- } ) ;
359+ overlayRef = overlay . create ( config ) ;
360+ fakeScrollStrategy =
361+ scrollOptions . instances [ scrollOptions . instances . length - 1 ] as FakeScrollStrategy ;
362+ } ) ) ;
367363
368364 it ( 'should attach the overlay ref to the scroll strategy' , ( ) => {
369- let overlayRef = overlay . create ( config ) ;
370-
371365 expect ( fakeScrollStrategy . overlayRef ) . toBe ( overlayRef ,
372366 'Expected scroll strategy to have been attached to the current overlay ref.' ) ;
373367 } ) ;
374368
375369 it ( 'should enable the scroll strategy when the overlay is attached' , ( ) => {
376- let overlayRef = overlay . create ( config ) ;
377-
378370 overlayRef . attach ( componentPortal ) ;
379371 expect ( fakeScrollStrategy . isEnabled ) . toBe ( true , 'Expected scroll strategy to be enabled.' ) ;
380372 } ) ;
381373
382374 it ( 'should disable the scroll strategy once the overlay is detached' , ( ) => {
383- let overlayRef = overlay . create ( config ) ;
384-
385375 overlayRef . attach ( componentPortal ) ;
386376 expect ( fakeScrollStrategy . isEnabled ) . toBe ( true , 'Expected scroll strategy to be enabled.' ) ;
387377
@@ -390,8 +380,6 @@ describe('Overlay', () => {
390380 } ) ;
391381
392382 it ( 'should disable the scroll strategy when the overlay is destroyed' , ( ) => {
393- let overlayRef = overlay . create ( config ) ;
394-
395383 overlayRef . dispose ( ) ;
396384 expect ( fakeScrollStrategy . isEnabled ) . toBe ( false , 'Expected scroll strategy to be disabled.' ) ;
397385 } ) ;
@@ -469,3 +457,37 @@ class FakePositionStrategy implements PositionStrategy {
469457
470458 dispose ( ) { }
471459}
460+
461+
462+ class FakeScrollStrategy implements ScrollStrategy {
463+ isEnabled = false ;
464+ overlayRef : OverlayRef ;
465+
466+ attach ( overlayRef : OverlayRef ) {
467+ this . overlayRef = overlayRef ;
468+ }
469+
470+ enable ( ) {
471+ this . isEnabled = true ;
472+ }
473+
474+ disable ( ) {
475+ this . isEnabled = false ;
476+ }
477+ }
478+
479+
480+ class ScrollStrategyOptionsOverride extends ScrollStrategyOptions {
481+ constructor ( scrollDispatcher : ScrollDispatcher , viewportRuler : ViewportRuler ) {
482+ super ( scrollDispatcher , viewportRuler ) ;
483+ }
484+
485+ // used for accessing the current instance in unit tests.
486+ public instances : ScrollStrategy [ ] = [ ] ;
487+
488+ get ( strategy : string ) : ScrollStrategy {
489+ let instance = strategy === 'fake' ? new FakeScrollStrategy ( ) : super . get ( strategy ) ;
490+ this . instances . push ( instance ) ;
491+ return instance ;
492+ }
493+ }
0 commit comments