@@ -3,8 +3,9 @@ import {HtmlImageLayer} from "../src";
33import { BaseAnalyticsOptions } from "../src/types" ;
44import { responsive } from "../src/plugins/responsive" ;
55import { placeholder } from "../src/plugins/placeholder" ;
6- import { lazyload } from "../src/plugins/lazyload" ;
76import { accessibility } from "../src/plugins/accessibility" ;
7+ import { PluginResponse } from "../types" ;
8+ import { cancelCurrentlyRunningPlugins } from "../src/utils/cancelCurrentlyRunningPlugins" ;
89
910jest . useFakeTimers ( ) ;
1011
@@ -51,4 +52,47 @@ describe('HtmlImageLayer tests', function () {
5152 await flushPromises ( ) ;
5253 expect ( img . src ) . toEqualAnalyticsToken ( 'AXAABABD' ) ;
5354 } ) ;
55+
56+ it ( 'should set image src twice if HtmlImageLayer instance won\'t be unmounted' , async function ( ) {
57+ const img = document . createElement ( 'img' ) ;
58+ const pluginsState : any = {
59+ cleanupCallbacks : [ ]
60+ } ;
61+ const spy = jest . spyOn ( img , 'setAttribute' ) ;
62+ const dummyFailingPlugin = ( ) : Promise < PluginResponse > => new Promise ( ( resolve ) => {
63+ pluginsState . cleanupCallbacks . push ( ( ) => {
64+ resolve ( 'canceled' )
65+ } )
66+ } ) ;
67+ const dummyLazyLoadPlugin = ( ) : Promise < PluginResponse > => new Promise ( ( resolve ) => {
68+ resolve ( { lazyload : true } ) ;
69+ } ) ;
70+ new HtmlImageLayer ( img , cldImage , [ dummyFailingPlugin ] ) ;
71+ new HtmlImageLayer ( img , cldImage , [ dummyLazyLoadPlugin ] ) ;
72+ cancelCurrentlyRunningPlugins ( pluginsState ) ;
73+ await flushPromises ( ) ;
74+ expect ( spy ) . toHaveBeenCalledTimes ( 2 ) ;
75+ } ) ;
76+
77+ it ( 'should set image src only once if HtmlImageLayer instance will be unmounted' , async function ( ) {
78+ const img = document . createElement ( 'img' ) ;
79+ const pluginsState : any = {
80+ cleanupCallbacks : [ ]
81+ } ;
82+ const spy = jest . spyOn ( img , 'setAttribute' ) ;
83+ const dummyFailingPlugin = ( ) : Promise < PluginResponse > => new Promise ( ( resolve ) => {
84+ pluginsState . cleanupCallbacks . push ( ( ) => {
85+ resolve ( 'canceled' )
86+ } )
87+ } ) ;
88+ const dummyLazyLoadPlugin = ( ) : Promise < PluginResponse > => new Promise ( ( resolve ) => {
89+ resolve ( { lazyload : true } ) ;
90+ } ) ;
91+ const instance1 = new HtmlImageLayer ( img , cldImage , [ dummyFailingPlugin ] ) ;
92+ new HtmlImageLayer ( img , cldImage , [ dummyLazyLoadPlugin ] ) ;
93+ cancelCurrentlyRunningPlugins ( pluginsState ) ;
94+ instance1 . unmount ( ) ;
95+ await flushPromises ( ) ;
96+ expect ( spy ) . toHaveBeenCalledTimes ( 1 ) ;
97+ } ) ;
5498} ) ;
0 commit comments