blob: a0e10f1990435436d3368a4efa3ea9777fc57bf6 [file] [log] [blame]
/*
* 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 Toast from '../../../../render/vue/modules/modal/toast'
import Alert from '../../../../render/vue/modules/modal/alert'
import Confirm from '../../../../render/vue/modules/modal/confirm'
import Prompt from '../../../../render/vue/modules/modal/prompt'
import Modal from '../../../../render/vue/modules/modal/modal'
import {
nodeListToArray
} from '../helper/utils'
/** @test {webSocket module} */
describe('modal module', function () {
after(function (done) {
done()
})
describe('modal API', function () {
const modal = new Modal()
it('should have prototype', function () {
expect(modal).to.have.property('show')
expect(modal).to.have.property('destroy')
expect(modal).to.have.property('createWrap')
expect(modal).to.have.property('createNode')
expect(modal).to.have.property('clearNode')
expect(modal).to.have.property('createNodeContent')
expect(modal).to.have.property('bindEvents')
})
it('wrap style should be weex-modal-wrap when show method is called', function () {
// Modal
// assert.strictEqual($modal[0], $el[0], 'collection contains element')
})
})
describe('toast API', function () {
const toast = Toast
const config = {
message: 'Test',
duration: 1
}
it('should have method', function () {
expect(toast.push).to.be.a('function')
expect(toast.show).to.be.a('function')
})
it('should toast mount on document when push method is called', function () {
const TOAST_WIN_CLASS_NAME = '.weex-toast'
let $Toast = null
const clock = sinon.useFakeTimers()
toast.push(config.message, config.duration)
$Toast = document.querySelector(TOAST_WIN_CLASS_NAME)
expect($Toast.innerText, 'should contain Test message').to.be.equal(config.message)
expect(nodeListToArray($Toast.classList), 'should include hide class').to.include('hide')
clock.tick(config.duration * 1000)
expect(nodeListToArray($Toast.classList), 'should remove hide class').to.not.include('hide')
})
it('call show method while toast queue length < 1', function () {
const TOAST_WIN_CLASS_NAME = '.weex-toast'
let $Toast = null
toast.show()
$Toast = document.querySelector(TOAST_WIN_CLASS_NAME)
expect($Toast, 'element should be null when toast quene length < 1').to.be.null
})
})
describe('alert API', function () {
const config = {
message: 'Test',
callback: function () {}
}
const alert = new Alert(config)
it('extends Standard modal API', function () {
expect(alert).to.have.property('show')
expect(alert).to.have.property('destroy')
expect(alert).to.have.property('createWrap')
expect(alert).to.have.property('createNode')
expect(alert).to.have.property('clearNode')
expect(alert).to.have.property('createNodeContent')
expect(alert).to.have.property('bindEvents')
})
it('should have prototype', function () {
expect(alert).to.have.property('createNodeContent')
expect(alert).to.have.property('bindEvents')
})
it('would alert mount on document when instance is created', function () {
const ALERT_WEEX_CLASS_NAME = '.weex-alert'
const ALERT_WEEX_MSG_CLASS_NAME = '.content-msg'
const BUTTON_CLASS = '.alert-ok'
let $Alert = null
$Alert = document.querySelector(ALERT_WEEX_CLASS_NAME)
const messageShouldBe = $Alert.querySelector(ALERT_WEEX_MSG_CLASS_NAME).innerText
const button = $Alert.querySelector(BUTTON_CLASS)
expect(messageShouldBe, 'should contain Test message').to.be.equal(config.message)
const event = document.createEvent('HTMLEvents')
event.initEvent('click', false, true)
button.dispatchEvent(event)
$Alert = document.querySelector(ALERT_WEEX_CLASS_NAME)
expect($Alert, 'element would unmount while ok button is clicked').to.be.null
})
})
describe('confirm API', function () {
let callbackResult = ''
const config = {
message: 'Test',
okTitle: 'ok',
cancelTitle: 'cancel',
callback: function (ret) {
callbackResult = ret
}
}
let confirm = new Confirm(config)
it('extends Standard modal API', function () {
expect(confirm).to.have.property('show')
expect(confirm).to.have.property('destroy')
expect(confirm).to.have.property('createWrap')
expect(confirm).to.have.property('createNode')
expect(confirm).to.have.property('clearNode')
expect(confirm).to.have.property('createNodeContent')
expect(confirm).to.have.property('bindEvents')
})
it('should have prototype', function () {
expect(confirm.createNodeContent).to.be.a('function')
expect(confirm.bindEvents).to.be.a('function')
})
it('would confirm mount on document when instance is created', function () {
const CONFIRM_WEEX_CLASS_NAME = '.weex-confirm'
const CONFIRM_WEEX_MSG_CLASS_NAME = '.content-msg'
const OK_BUTTON_CLASS = '.btn-ok'
const CANCEL_BUTTON_CLASS = '.btn-cancel'
let $CONFIRM = null
$CONFIRM = document.querySelector(CONFIRM_WEEX_CLASS_NAME)
const messageShouldBe = $CONFIRM.querySelector(CONFIRM_WEEX_MSG_CLASS_NAME).innerText
let button = $CONFIRM.querySelector(OK_BUTTON_CLASS)
expect(messageShouldBe, 'should contain Test message').to.be.equal(config.message)
let event = document.createEvent('HTMLEvents')
event.initEvent('click', false, true)
button.dispatchEvent(event)
$CONFIRM = document.querySelector(CONFIRM_WEEX_CLASS_NAME)
expect($CONFIRM, 'element would unmount while ok button is clicked').to.be.null
expect(callbackResult, 'callback would return okTitle').to.be.equal(config.okTitle)
// reopen confirm for test cancel button
confirm = new Confirm(config)
$CONFIRM = document.querySelector(CONFIRM_WEEX_CLASS_NAME)
button = $CONFIRM.querySelector(CANCEL_BUTTON_CLASS)
event = document.createEvent('HTMLEvents')
event.initEvent('click', false, true)
button.dispatchEvent(event)
$CONFIRM = document.querySelector(CONFIRM_WEEX_CLASS_NAME)
expect($CONFIRM, 'element would unmount while ok button is clicked').to.be.null
expect(callbackResult, 'callback would return okTitle').to.be.equal(config.cancelTitle)
})
})
describe('prompt API', function () {
let callbackResult = ''
const config = {
message: 'Test',
okTitle: 'ok',
cancelTitle: 'cancel',
callback: function (ret) {
callbackResult = ret
}
}
const inputMessage = 'prompt message'
let prompt = new Prompt(config)
it('extends Standard modal API', function () {
expect(prompt).to.have.property('show')
expect(prompt).to.have.property('destroy')
expect(prompt).to.have.property('createWrap')
expect(prompt).to.have.property('createNode')
expect(prompt).to.have.property('clearNode')
expect(prompt).to.have.property('createNodeContent')
expect(prompt).to.have.property('bindEvents')
})
it('should have prototype', function () {
expect(prompt.createNodeContent).to.be.a('function')
expect(prompt.bindEvents).to.be.a('function')
})
it('would prompt mount on document when instance is created', function () {
const PROMPT_WEEX_CLASS_NAME = '.weex-prompt'
const PROMPT_WEEX_MSG_CLASS_NAME = '.content-msg'
const OK_BUTTON_CLASS = '.btn-ok'
const CANCEL_BUTTON_CLASS = '.btn-cancel'
let $Prompt
$Prompt = document.querySelector(PROMPT_WEEX_CLASS_NAME)
const messageShouldBe = $Prompt.querySelector(PROMPT_WEEX_MSG_CLASS_NAME).innerText
let button = $Prompt.querySelector(OK_BUTTON_CLASS)
expect(messageShouldBe, 'should contain Test message').to.be.equal(config.message)
let event = document.createEvent('HTMLEvents')
$Prompt.querySelector('input').value = inputMessage
event.initEvent('click', false, true)
button.dispatchEvent(event)
$Prompt = document.querySelector(PROMPT_WEEX_CLASS_NAME)
expect($Prompt, 'element would unmount while ok button is clicked').to.be.null
expect(callbackResult, 'callback would return {result:string,data:string}').to.deep.equal({
result: config.okTitle,
data: inputMessage
})
// reopen prompt for test cancel button
prompt = new Prompt(config)
$Prompt = document.querySelector(PROMPT_WEEX_CLASS_NAME)
button = $Prompt.querySelector(CANCEL_BUTTON_CLASS)
event = document.createEvent('HTMLEvents')
$Prompt.querySelector('input').value = inputMessage
event.initEvent('click', false, true)
button.dispatchEvent(event)
$Prompt = document.querySelector(PROMPT_WEEX_CLASS_NAME)
expect($Prompt, 'element would unmount while ok button is clicked').to.be.null
expect(callbackResult, 'callback would return {result:string,data:string}').to.deep.equal({
result: config.cancelTitle,
data: inputMessage
})
})
})
})