%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/templates/landing24/assets/vendor/circles/spec/ |
| Current File : //home/bitrix/www/bitrix/templates/landing24/assets/vendor/circles/spec/circlesspec.js |
describe('Circles', function() {
it('is defined', function() {
expect(typeof Circles).toEqual('function');
});
var element, circle;
function getText()
{
return element.firstChild.children[1];
}
function getSVG()
{
return element.firstChild.getElementsByTagName('svg')[0];
}
beforeEach(function() {
element = document.createElement('div');
element.id = 'circles-1';
document.body.appendChild(element);
});
afterEach(function() {
element.parentNode.removeChild(element);
});
describe('Creation', function() {
it('returns a Circles instance', function() {
var circles = Circles.create({});
expect(circles instanceof Circles).toBeTruthy();
});
it('returns an instance with 0 as value', function() {
var circles = Circles.create({id: element.id});
expect(circles.getValue()).toEqual(0);
});
it('returns an instance with 100 as max value', function() {
var circles = Circles.create({id: element.id});
expect(circles.getMaxValue()).toEqual(100);
});
describe('Generated content', function() {
beforeEach(function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
duration: null
});
});
it('contains a wrapper with default class', function() {
Circles.create({
id: element.id,
value: 40,
radius: 60,
duration: null,
wrpClass: 'wrapContainer'
});
expect(element.firstChild.className).toEqual('wrapContainer');
});
it('contains a wrapper with provided class', function() {
expect(element.firstChild.className).toEqual('circles-wrp');
});
it('contains a SVG tag', function() {
expect(getSVG() instanceof SVGSVGElement).toBeTruthy();
});
it('contains two PATH tags into the SVG', function() {
expect(getSVG().getElementsByTagName('path').length).toEqual(2);
});
it('adds class attributes to the path', function() {
expect(getSVG().getElementsByTagName('path')[0].getAttribute('class')).toEqual('circles-maxValueStroke');
});
it('adds provided class attributes to the path', function() {
Circles.create({
id: element.id,
value: 40,
radius: 60,
duration: null,
maxValueStrokeClass: 'testMaxValueClass',
wrpClass: 'wrapContainer'
});
expect(getSVG().getElementsByTagName('path')[0].getAttribute('class')).toEqual('testMaxValueClass');
});
it('contains the SVG without animation', function() {
var dValue = getSVG().getElementsByTagName('path')[1].getAttribute('d');
expect(dValue).toEqual('M 59.988797973796764 5.000001140776291 A 55 55 0 0 1 92.3939094694214 104.44811165040569 ');
});
it("contains the SVG with animation", function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60
});
var dValue = element.firstChild.getElementsByTagName('svg')[0].getElementsByTagName('path')[1].getAttribute('d');
expect(dValue).toEqual('M 59.988797973796764 5.000001140776291 A 55 55 0 0 1 63.396635173034774 5.1049831997356705 ');
});
it('has styles by default', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
text: '%',
duration: null
});
expect(element.firstChild.style[0]).toBeTruthy();
});
it('can have its styles overridden', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
duration: null,
text: '%',
styleWrapper: false
});
expect(element.firstChild.style[0]).toBeFalsy();
});
});
describe('Text', function() {
it('has a container', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
duration: null
});
expect(getText() instanceof HTMLDivElement).toBeTruthy();
});
it('has a container with default class', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
duration: null
});
expect(getText().className).toEqual('circles-text');
});
it('has a container with provided class', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
duration: null,
textClass: 'textContainer'
});
expect(getText().className).toEqual('textContainer');
});
it('contains the supplied text', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
text: '%',
duration: null
});
expect(getText().innerHTML).toEqual('%');
});
it('can be managed by a function', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
text: function(value)
{
return value + '%';
},
duration: null
});
expect(getText().innerHTML).toEqual('40%');
});
it('can be empty', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
text: null,
duration: null
});
expect(getText().innerHTML).toBeFalsy();
});
it('has styles by default', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
text: '%',
duration: null
});
expect(getText().style[0]).toBeTruthy();
});
it('can have its styles overridden', function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
duration: null,
text: '%',
styleText: false
});
expect(getText().style[0]).toBeFalsy();
});
});
});
describe('API', function() {
beforeEach(function() {
circle = Circles.create({
id: element.id,
value: 40,
radius: 60,
duration: null
});
});
it('can update radius', function() {
circle.updateRadius(30);
expect(getSVG().getAttribute('width') == 60).toBeTruthy();
});
it('can update stroke width', function() {
circle.updateWidth(20);
expect(getSVG().getElementsByTagName('path')[1].getAttribute('stroke-width') == 20).toBeTruthy();
});
it('can update colors', function() {
circle.updateColors(['#000', '#fff']);
var paths = getSVG().getElementsByTagName('path');
expect(paths[0].getAttribute('stroke') === '#000' && paths[1].getAttribute('stroke') === '#fff').toBeTruthy();
});
it('can get correct percentage', function() {
expect(circle.getPercent()).toEqual(40);
});
it('can update value', function() {
circle.update(50);
expect(circle.getPercent()).toEqual(50);
});
it('can get correct value from percentage', function() {
circle = Circles.create({
id: element.id,
maxValue: 1000,
duration: null
});
expect(circle.getValueFromPercent(25)).toEqual(250);
});
it('can return HTML representation of a number', function() {
expect(circle.htmlifyNumber(12.43, 'int', 'float')).toEqual('<span class="int">12</span>.<span class="float">43</span>');
});
});
});