import { mount } from '@vue/test-utils'; import IconifyIcon from '../'; const iconData = { body: '', width: 24, height: 24, }; const iconDataWithID = { body: '', width: 128, height: 128, }; // Spacing for HTML matches const spacing = (count) => { return '\n' + ' '.repeat(count); }; describe('Mounting component', () => { test('with wrapper', () => { const Wrapper = { components: { IconifyIcon }, template: ``, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); }); test('without wrapper', () => { const wrapper = mount(IconifyIcon, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' ); }); }); describe('Rendering icon', () => { test('as object', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' ); }); test('as string', () => { const iconName = 'test-string'; IconifyIcon.addIcon(iconName, iconData); const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconName, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' ); }); test('as string with icon set', () => { const iconSet = { prefix: 'mdi-light', icons: { account: { body: '', }, home: { body: '', }, }, width: 24, height: 24, }; IconifyIcon.addCollection(iconSet); const Wrapper = { components: { IconifyIcon }, template: ``, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' ); }); test('as string with icon set with custom prefix', () => { const iconSet = { prefix: 'mdi-light', icons: { 'account-alert': { body: '', }, 'link': { body: '', }, }, width: 24, height: 24, }; IconifyIcon.addCollection(iconSet, 'custom-'); const Wrapper = { components: { IconifyIcon }, template: ``, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' ); }); test('replacing id', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconDataWithID, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).not.toMatch('id="ssvg-id-1st-place-medala"'); }); }); describe('Passing attributes', () => { test('title', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' ); }); test('aria-hidden', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' + spacing(1) + '' + spacing(0) + '' ); }); test('ariaHidden', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' + spacing(1) + '' + spacing(0) + '' ); }); test('attributes that cannot change', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( // same values, but different order '' ); }); }); describe('Dimensions', () => { test('height', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, height: 24, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' ); }); test('width and height', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, width: 32, // as number height: '48', // as string }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' ); }); test('auto', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, height: 'auto', }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toStrictEqual( '' ); }); }); describe('Rotation', () => { test('number', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, rotate: 1, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toMatch('rotate(90 '); }); test('string', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toMatch('rotate(-90 '); }); }); describe('Flip', () => { test('boolean', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, horizontalFlip: true, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toMatch('scale(-1 1)'); }); test('string', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toMatch('scale(1 -1)'); }); test('string and boolean', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); // horizontal + vertical = 180deg rotation expect(item.html()).toMatch('rotate(180 '); }); test('string for boolean attribute', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toMatch('scale(-1 1)'); }); test('shorthand and boolean', () => { // 'flip' is processed after 'hFlip', overwriting value const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toMatch('scale(-1 1)'); }); test('shorthand and boolean as string', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); // horizontal + vertical = 180deg rotation expect(item.html()).toMatch('rotate(180 '); }); test('wrong case', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, verticalflip: true, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).not.toMatch('scale('); expect(item.html()).not.toMatch('rotate('); }); }); describe('Alignment and slice', () => { test('vAlign and slice', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toMatch('preserveAspectRatio="xMidYMin slice"'); }); test('string', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toMatch('preserveAspectRatio="xMinYMax meet"'); }); test('Alignment aliases', () => { const Wrapper = { components: { IconifyIcon }, template: ``, data() { return { icon: iconData, }; }, }; const wrapper = mount(Wrapper, {}); const item = wrapper.findComponent(IconifyIcon); expect(item.exists()).toBe(true); expect(item.html()).toMatch('preserveAspectRatio="xMaxYMin meet"'); }); });