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],
        ['my\u007fapp', 10, 20, 40, 20, 65, 55]
      ]
    }
  }

  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('select target in 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)
    })

    it('should be able to select class with unicode characters', () => {
      const selector = `.c3-target${chart.internal.getTargetSelectorSuffix(
        args.data.columns[3][0]
      )}`

      expect(chart.internal.main.select(selector).size()).toBe(1)
    })
  })
})
