Skip to content

Commit

Permalink
fix(vdom): support multiple spaces and line breaks in class (#1762)
Browse files Browse the repository at this point in the history
fixes #1757
  • Loading branch information
AlexSerrano22 authored and manucorporat committed Jul 25, 2019
1 parent 467a966 commit fb85af1
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
22 changes: 22 additions & 0 deletions src/runtime/test/render-vdom.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,28 @@ describe('render-vdom', () => {
`);
});

it('should add classes', async () => {
@Component({ tag: 'cmp-a'})
class CmpA {
render() {
return <div class={
` class1
class2
class3 `}
>Hello VDOM</div>;
}
}

const { body, waitForChanges } = await newSpecPage({
components: [CmpA],
html: `<cmp-a></cmp-a>`
});

expect(body).toEqualHtml(`
<cmp-a><div class="class1 class2 class3">Hello VDOM</div></cmp-a>
`);
});

it('should error when reusing vnodes', async () => {

@Component({ tag: 'cmp-a' })
Expand Down
2 changes: 1 addition & 1 deletion src/runtime/vdom/set-accessor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,4 @@ export const setAccessor = (elm: HTMLElement, memberName: string, oldValue: any,
};

const parseClassList = (value: string | undefined | null): string[] =>
(!value) ? [] : value.split(' ').filter(c => c);
(!value) ? [] : value.split(/\s+/).filter(c => c);
12 changes: 12 additions & 0 deletions src/runtime/vdom/test/set-accessor.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -660,6 +660,11 @@ describe('setAccessor for standard html elements', () => {
' class1 class2',
'new class4', false, 0);
expect(elm).toHaveClasses(['class3', 'new', 'class4']);

setAccessor(elm, 'class', undefined, `class1
class2
class3 `, false, 0);
expect(elm).toHaveClasses(['class1', 'class2', 'class3']);
});

it('should not add any classes', () => {
Expand All @@ -675,6 +680,9 @@ describe('setAccessor for standard html elements', () => {

setAccessor(elm, 'class', undefined, undefined, false, 0);
expect(elm).toHaveClasses([]);

setAccessor(elm, 'class', '', `\n \n \n `, false, 0);
expect(elm).toHaveClasses([]);
});

it('should remove classes', () => {
Expand All @@ -683,6 +691,10 @@ describe('setAccessor for standard html elements', () => {

setAccessor(elm, 'class', 'icon', 'icon2', false, 0);
expect(elm).toHaveClasses(['ion-color', 'icon2']);

setAccessor(elm, 'class', `icon
ion-color`, 'icon2', false, 0);
expect(elm).toHaveClasses(['icon2']);
});

it('should not have duplicated classes', () => {
Expand Down

0 comments on commit fb85af1

Please sign in to comment.