describe('c3 chart class', function () {
    'use strict';

    var chart;

    var args = {
        data: {
            columns: [
                ['data1', 30, 200, 100, 400, 150, 250],
                ['data2 prefix', 50, 20, 10, 40, 15, 25],
                ['data3 мужчины', 150, 120, 110, 140, 115, 125]
            ]
        }
    };

    beforeEach(function (done) {
        chart = window.initChart(chart, args, done);
    });

    describe('internal.generateTargetClass', function () {

        it('should not replace any characters', function () {
            var input = 'data1',
                expected = '-' + input,
                suffix = chart.internal.generateTargetClass(input);
            expect(suffix).toBe(expected);
        });

        it('should replace space to "-"', function () {
            var input = 'data1 suffix',
                expected = '-data1-suffix',
                suffix = chart.internal.generateTargetClass(input);
            expect(suffix).toBe(expected);
        });

        it('should replace space to "-" with multibyte characters', function () {
            var input = 'data1 suffix 日本語',
                expected = '-data1-suffix-日本語',
                suffix = chart.internal.generateTargetClass(input);
            expect(suffix).toBe(expected);
        });

        it('should not replace special characters', function () {
            var input = 'data1 !@#$%^&*()_=+,.<>"\':;[]/|?~`{}\\',
                expected = '-data1-!@#$%^&*()_=+,.<>"\':;[]/|?~`{}\\',
                suffix = chart.internal.generateTargetClass(input);
            expect(suffix).toBe(expected);
        });
    });

    describe('internal.getTargetSelectorSuffix', function () {

        it('should escape special characters', function () {
            var input = 'data1 !@#$%^&*()_=+,.<>"\':;[]/|?~`{}\\',
                expected = '-data1-\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\=\\+\\,\\.\\<\\>\\"\\\'\\:\\;\\[\\]\\/\\|\\?\\~\\`\\{\\}\\\\',
                suffix = chart.internal.getTargetSelectorSuffix(input);
            expect(suffix).toBe(expected);
        });

    });

    describe('multibyte characters on chart', function () {

        it('should replace space to "-" with multibyte characters', function () {
            var selector = '.c3-target-data3-мужчины';
            expect(chart.internal.main.select(selector).size()).toBe(1);
        });

    });

});