/**
* MUI test react appbar library
* @module test/react-tests/test-appbar
*/
import assert from 'assert';
import React from 'react';
import ReactDOM from 'react-dom';
import ReactUtils from 'react-dom/test-utils';
import { requestAnimationFrame } from '../../src/js/lib/util';
import jqLite from '../../src/js/lib/jqLite';
import Button from '../../src/react/button';
import { getShallowRendererOutput } from '../lib/react-helpers';
describe('react/button', function() {
it('renders properly', function() {
let result = getShallowRendererOutput();
assert.equal(result.type, 'button');
assert.equal(/\bmui-btn\b/.test(result.props.className), true);
assert.equal(result.props.children[0], 'test');
});
it('renders properly with addtional classNames', function () {
let result = getShallowRendererOutput(
);
assert.equal(/\badditional\b/.test(result.props.className), true)
})
it('renders properly with additional styles', function() {
let result = getShallowRendererOutput(
);
assert.equal(result.props.style.additonal, 'style');
});
it('supports colors', function() {
let result = getShallowRendererOutput(
);
assert.equal(/mui-btn--primary/.test(result.props.className), true);
});
it('supports variants', function() {
let result = getShallowRendererOutput(
);
assert.equal(/mui-btn--raised/.test(result.props.className), true);
});
it('supports sizes', function() {
let result = getShallowRendererOutput();
assert.equal(/mui-btn--large/.test(result.props.className), true);
});
it('supports type attribute', function() {
// check default
let result = getShallowRendererOutput();
assert.equal(result.props.type, null);
// check 'button' type
result = getShallowRendererOutput(
);
assert.equal(result.props.type, 'button');
});
it('supports click, mouse and touch events', function() {
let executedEvents = [],
triggeredEvents = [];
// define callback
const fn = function(ev) {executedEvents.push(ev.type);};
// define props
const props = {
onClick: fn,
onMouseDown: fn,
onMouseUp: fn,
onMouseLeave: fn,
onTouchStart: fn,
onTouchEnd: fn
};
const node = ReactUtils.renderIntoDocument(
);
// trigger events
let k, eventName, eventType;
for (k in props) {
// remove 'on' and lowercase first letter
eventName = k.charAt(2).toLowerCase() + k.substr(3, k.length);
eventType = eventName.toLowerCase();
// trigger event
ReactUtils.Simulate[eventName](node.refs.buttonEl, {type: eventType});
triggeredEvents.push(eventType);
}
// check that events were executed
assert.deepEqual(triggeredEvents, executedEvents);
});
it('renders ripples on click', function(done) {
let node = ReactUtils.renderIntoDocument(),
buttonEl = node.refs.buttonEl,
rippleEl = node.refs.rippleEl;
// check state before click
assert.equal(node.state.ripple, null);
assert.equal(jqLite.hasClass(rippleEl, 'mui--is-visible'), false);
// trigger ripple
ReactUtils.Simulate.mouseDown(buttonEl);
// check state after click
assert.equal(jqLite.hasClass(rippleEl, 'mui--is-visible'), true);
assert.equal(jqLite.hasClass(rippleEl, 'mui--is-animating'), false);
// check animation
requestAnimationFrame(function() {
assert.equal(jqLite.hasClass(rippleEl, 'mui--is-animating'), true);
// remove ripple
ReactUtils.Simulate.mouseUp(node.refs.buttonEl);
requestAnimationFrame(function() {
assert.equal(jqLite.hasClass(rippleEl, 'mui--is-visible'), false);
done();
});
});
});
});