| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| import dom from '../../../../render/vue/modules/dom' |
| describe('dom module', () => { |
| const callback = sinon.spy() |
| weex.install(dom) |
| const domModule = weex.requireModule('dom') |
| it('should scrollToElement be worked', (done) => { |
| const { |
| scrollToElement |
| } = domModule |
| const node = document.createElement('div') |
| const vnode = { |
| $el: node |
| } |
| const options = { |
| offset: 100 |
| } |
| node.style.height = '100px' |
| node.style.width = '100px' |
| node.style.backgroundColor = 'green' |
| node.style['margin-top'] = '800px' |
| expect(scrollToElement).to.be.a('function') |
| scrollToElement([vnode], options) |
| setTimeout(() => { |
| expect(document.body.scrollTop).to.be.equal(0) |
| scrollToElement(vnode, { |
| animated: false |
| }) |
| expect(document.body.scrollTop).to.be.equal(0) |
| done() |
| }, 500) |
| }) |
| it('should getComponentRect be worked', () => { |
| const { |
| getComponentRect |
| } = domModule |
| const node = document.createElement('div') |
| const vnode = { |
| $el: node, |
| $refs: {} |
| } |
| const rectKeys = ['width', 'height', 'top', 'bottom', 'left', 'right'] |
| let message |
| const scale = window.weex.config.env.scale |
| const recalc = (rect) => { |
| const res = {} |
| rectKeys.forEach(function (key) { |
| res[key] = rect[key] / scale |
| }) |
| return res |
| } |
| node.style.height = '100px' |
| node.style.width = '100px' |
| document.body.appendChild(node) |
| expect(getComponentRect).to.be.a('function') |
| // while node is an element |
| message = getComponentRect([vnode], callback) |
| expect(message.result).to.be.true |
| expect(message.size.width).to.be.equal(recalc({ |
| width: 100 |
| }).width) |
| expect(message.size.height).to.be.equal(recalc({ |
| height: 100 |
| }).height) |
| expect(message.contentSize.width).to.be.equal(recalc({ |
| width: 100 |
| }).width) |
| expect(message.contentSize.height).to.be.equal(recalc({ |
| height: 100 |
| }).height) |
| expect(callback.callCount).to.be.equal(1) |
| // while node is a viewport |
| message = getComponentRect('viewport', callback) |
| expect(message.result).to.be.true |
| expect(message.size.width).to.be.equal(recalc({ |
| width: document.documentElement.clientWidth |
| }).width) |
| expect(message.size.right).to.be.equal(recalc({ |
| right: document.documentElement.clientWidth |
| }).right) |
| expect(message.size.height).to.be.equal(recalc({ |
| height: document.documentElement.clientHeight |
| }).height) |
| expect(message.size.bottom).to.be.equal(recalc({ |
| bottom: document.documentElement.clientHeight |
| }).bottom) |
| expect(message.contentSize.width).to.be.equal(recalc({ |
| bottom: document.documentElement.offsetWidth |
| }).bottom) |
| expect(message.contentSize.height).to.be.equal(recalc({ |
| bottom: document.documentElement.offsetHeight |
| }).bottom) |
| expect(callback.callCount).to.be.equal(2) |
| document.body.removeChild(node) |
| }) |
| it('should addRule be worked', () => { |
| const { |
| addRule |
| } = domModule |
| const key = 'font-face' |
| const styles = { |
| 'font-family': 'iconfont' |
| } |
| expect(addRule).to.be.a('function') |
| addRule(key, styles) |
| const styleElement = document.getElementById('dom-added-rules') |
| expect(styleElement.innerText).to.be.equal('@font-face{font-family:iconfont;}') |
| }) |
| }) |