text: import MessageBox from 'packages/message-box';
  
  describe('MessageBox', () => {
    let hasPromise = true;
    before(() => {
      if (!window.Promise) {
        hasPromise = false;
        window.Promise = require('es6-promise').Promise;
      }
    });
  
    after(() => {
      if (!hasPromise) {
        window.Promise = undefined;
      }
    });
  
    afterEach(() => {
      const el = document.querySelector('.y-message-box__wrapper');
      if (!el) return;
      if (el.parentNode) {
        el.parentNode.removeChild(el);
      }
      MessageBox.close();
    });
  
    it('create and close', done => {
      MessageBox({
        type: 'success',
        title: '消息',
        message: '这是一段内容'
      });
      setTimeout(() => {
        const msgbox = document.querySelector('.y-message-box__wrapper');
        expect(msgbox.__vue__.$parent.visible).to.true;
        expect(msgbox.querySelector('.y-message-box__title span').textContent).to.equal('消息');
        expect(msgbox.querySelector('.y-message-box__message')
          .querySelector('p').textContent).to.equal('这是一段内容');
        MessageBox.close();
        expect(msgbox.__vue__.$parent.visible).to.false;
        done();
      }, 300);
    });
  
    it('invoke with strings', done => {
      MessageBox('消息', '这是一段内容', 'success');
      setTimeout(() => {
        expect(document.querySelector('.y-message-box__wrapper')).to.exist;
        done();
      }, 300);
    });
  
    it('custom icon', done => {
      MessageBox({
        type: 'warning',
        iconClass: 'y-icon-question',
        message: '这是一段内容'
      });
      setTimeout(() => {
        const icon = document.querySelector('.y-message-box__status');
        expect(icon.classList.contains('y-icon-question')).to.true;
        done();
      }, 300);
    });
  
    it('html string', done => {
      MessageBox({
        title: 'html string',
        dangerouslyUseHTMLString: true,
        message: '<strong>html string</strong>'
      });
      setTimeout(() => {
        const message = document.querySelector('.y-message-box__message strong');
        expect(message.textContent).to.equal('html string');
        done();
      }, 300);
    });
  
    it('distinguish cancel and close', done => {
      let msgAction = '';
      MessageBox({
        title: '消息',
        message: '这是一段内容',
        distinguishCancelAndClose: true
      }, action => {
        msgAction = action;
      });
      setTimeout(() => {
        document.querySelector('.y-message-box__close').click();
        setTimeout(() => {
          expect(msgAction).to.equal('close');
          done();
        }, 10);
      }, 10);
    });
  
    it('alert', done => {
      MessageBox.alert('这是一段内容', {
        title: '标题名称',
        type: 'warning'
      });
      setTimeout(() => {
        document.querySelector('.v-modal').click();
        expect(document.querySelector('.y-message-box__wrapper')
          .__vue__.$parent.visible).to.true;
        expect(document.querySelector('.y-message-box__wrapper')
          .__vue__.$parent.type).to.equal('warning');
        done();
      }, 300);
    });
  
    it('confirm', done => {
      MessageBox.confirm('这是一段内容', {
        title: '标题名称',
        type: 'warning'
      });
      setTimeout(() => {
        document.querySelector('.y-message-box__wrapper')
          .querySelector('.y-button--primary').click();
        expect(document.querySelector('.y-message-box__wrapper')
          .__vue__.$parent.visible).to.false;
        done();
      }, 200);
    });
  
    it('prompt', done => {
      MessageBox.prompt('这是一段内容', {
        title: '标题名称',
        inputPattern: /test/,
        inputErrorMessage: 'validation failed'
      });
      setTimeout(() => {
        const messageBox = document.querySelector('.y-message-box__wrapper').__vue__.$parent;
        expect(messageBox.$el.querySelector('.y-message-box__input')).to.exist;
        const haveFocus = messageBox.$el.querySelector('input').isSameNode(document.activeElement);
        expect(haveFocus).to.true;
        messageBox.inputValue = 'no';
        setTimeout(() => {
          expect(messageBox.$el.querySelector('.y-message-box__errormsg')
            .textContent).to.equal('validation failed');
          done();
        }, 100);
      }, 700);
    });
  
    it('prompt: focus on textarea', done => {
      MessageBox.prompt('这是一段内容', {
        inputType: 'textarea',
        title: '标题名称'
      });
      setTimeout(() => {
        const messageBox = document.querySelector('.y-message-box__wrapper').__vue__.$parent;
        const haveFocus = messageBox.$el.querySelector('textarea').isSameNode(document.activeElement);
        expect(haveFocus).to.true;
        done();
      }, 700);
    });
  
    describe('custom validator', () => {
      it('returns a string', done => {
        const validator = value => {
          if (value !== 'test') return 'wrong';
          return true;
        };
        MessageBox.prompt('这是一段内容', {
          title: '标题名称',
          inputValidator: validator
        });
        setTimeout(() => {
          const messageBox = document.querySelector('.y-message-box__wrapper').__vue__.$parent;
          messageBox.inputValue = 'no';
          setTimeout(() => {
            expect(document.querySelector('.y-message-box__errormsg')
              .textContent).to.equal('wrong');
            messageBox.inputValue = 'test';
            setTimeout(() => {
              expect(document.querySelector('.y-message-box__errormsg')
                .textContent).to.equal('');
              done();
            }, 100);
          }, 100);
        }, 200);
      });
  
      it('returns false', done => {
        const validator = value => false;
        MessageBox.prompt('这是一段内容', {
          title: '标题名称',
          inputValidator: validator
        });
        setTimeout(() => {
          const messageBox = document.querySelector('.y-message-box__wrapper').__vue__.$parent;
          messageBox.inputValue = 'no';
          setTimeout(() => {
            expect(document.querySelector('.y-message-box__errormsg')
              .textContent).to.equal('输入的数据不合法!');
            done();
          }, 100);
        }, 200);
      });
    });
  
    it('callback', done => {
      let msgAction = '';
      MessageBox({
        title: '消息',
        message: '这是一段内容'
      }, action => {
        msgAction = action;
      });
      setTimeout(() => {
        document.querySelector('.y-message-box__close').click();
        setTimeout(() => {
          expect(msgAction).to.equal('cancel');
          done();
        }, 10);
      }, 10);
    });
  
    it('beforeClose', done => {
      let msgAction = '';
      MessageBox({
        title: '消息',
        message: '这是一段内容',
        beforeClose: (action, instance) => {
          instance.close();
        }
      }, action => {
        msgAction = action;
      });
      setTimeout(() => {
        document.querySelector('.y-message-box__wrapper .y-button--primary').click();
        setTimeout(() => {
          expect(msgAction).to.equal('confirm');
          done();
        }, 10);
      }, 10);
    });
  
    describe('promise', () => {
      it('resolve', done => {
        MessageBox.confirm('此操作将永久删除该文件, 是否继续?', '提示')
          .then(action => {
            expect(action).to.equal('confirm');
            done();
          });
        setTimeout(() => {
          document.querySelector('.y-message-box__wrapper .y-button--primary').click();
        }, 50);
      });
  
      it('reject', done => {
        MessageBox.confirm('此操作将永久删除该文件, 是否继续?', '提示')
          .catch(action => {
            expect(action).to.equal('cancel');
            done();
          });
        setTimeout(() => {
          document.querySelector('.y-message-box__wrapper .y-button').click();
        }, 50);
      });
    });
  });
  