167 lines
4.6 KiB
JavaScript
Executable File
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)
|
|
})
|
|
})
|
|
})
|
|
})
|