2023-04-25 13:25:59 +02:00

167 lines
4.6 KiB
JavaScript
Executable File

define(['iframeResizer'], function (iFrameResize) {
describe('Parent Page', function () {
describe('default resize', function () {
var iframe
var log = LOG
var testId = 'defaultResize3'
var ready
beforeEach(function (done) {
loadIFrame('iframe600.html')
iframe = iFrameResize({
log: log,
id: testId,
onResized: function () {
ready = true
done()
}
})[0]
mockMsgFromIFrame(iframe, 'foo')
})
afterEach(function () {
tearDown(iframe)
})
it('receive message', function () {
expect(ready).toBe(true)
})
})
describe('reset Page', function () {
var iframe
var log = LOG
var testId = 'parentPage1'
beforeEach(function (done) {
loadIFrame('iframe600.html')
iframe = iFrameResize({
log: log,
id: testId
})[0]
spyOn(iframe.contentWindow, 'postMessage').and.callFake(done)
mockMsgFromIFrame(iframe, 'reset')
})
afterEach(function () {
tearDown(iframe)
})
it('receive message', function () {
expect(iframe.contentWindow.postMessage).toHaveBeenCalledWith(
'[iFrameSizer]reset',
'https://localhost:9876'
)
})
})
describe('late load msg received', function () {
var iframe
var log = LOG
var testId = 'parentPage2'
beforeEach(function (done) {
loadIFrame('iframe600.html')
iframe = iFrameResize({
log: log,
id: testId
})[0]
spyOn(iframe.contentWindow, 'postMessage').and.callFake(done)
window.postMessage('[iFrameResizerChild]Ready', '*')
})
afterEach(function () {
tearDown(iframe)
})
it('receive message', function () {
expect(iframe.contentWindow.postMessage).toHaveBeenCalledWith(
'[iFrameSizer]parentPage2:8:false:true:32:true:true:null:bodyOffset:null:null:0:false:parent:scroll:true',
'https://localhost:9876'
)
})
})
describe('resize height', function () {
var iframe
var log = LOG
var testId = 'parentPage3'
var HEIGHT = 90
var extraHeights = [1, 2, 3, 4]
var setUp = (boxSizing, units) => {
loadIFrame('iframe.html')
iframe = iFrameResize({
log: log,
id: testId
})[0]
iframe.style.boxSizing = boxSizing
iframe.style.paddingTop = extraHeights[0] + units
iframe.style.paddingBottom = extraHeights[1] + units
iframe.style.borderTop = `${extraHeights[2]}${units} solid`
iframe.style.borderBottom = `${extraHeights[3]}${units} solid`
spyPostMsg = spyOn(iframe.contentWindow, 'postMessage')
// needs timeout so postMessage always comes after 'ready' postMessage
setTimeout(() => {
window.postMessage(
`[iFrameSizer]${testId}:${HEIGHT}:600:mutationObserver`,
'*'
)
}, 0)
}
afterEach(function () {
tearDown(iframe)
})
it('includes padding and borders from "px" units in height when CSS "box-sizing" is set to "border-box"', (done) => {
setUp('border-box', 'px')
// timeout needed because of requestAnimationFrame and must be more than window.postMessage in setUp
setTimeout(() => {
expect(iframe.offsetHeight).toBe(
HEIGHT + extraHeights.reduce((a, b) => a + b, 0)
)
done()
}, 100)
})
it('includes padding and borders from "rem" units in height when CSS "box-sizing" is set to "border-box"', (done) => {
const REM = 14
// changes the rem units of the doc so we can test accurately
document.querySelector('html').style.fontSize = `${REM}px`
setUp('border-box', 'rem')
// timeout needed because of requestAnimationFrame and must be more than window.postMessage in setUp
setTimeout(() => {
expect(iframe.offsetHeight).toBe(
HEIGHT + extraHeights.reduce((a, b) => a + b * REM, 0)
)
done()
}, 100)
})
it('includes padding and borders from "px" units in height when CSS "box-sizing" is set to "content-box"', (done) => {
setUp('content-box', 'px')
// timeout needed because of requestAnimationFrame and must be more than window.postMessage in setUp
setTimeout(() => {
expect(iframe.offsetHeight).toBe(
HEIGHT + extraHeights.reduce((a, b) => a + b, 0)
)
done()
}, 100)
})
})
})
})