From 5adbcedadf3f57c86009b9466dcca25eeddb403d Mon Sep 17 00:00:00 2001 From: Brandon Dail Date: Tue, 26 Apr 2016 10:35:40 -0500 Subject: [PATCH] Handle (in)significant whitespace in className --- src/MountedTraversal.js | 3 ++- src/ShallowTraversal.js | 3 ++- test/ReactWrapper-spec.js | 15 +++++++++++++++ test/ShallowWrapper-spec.js | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/MountedTraversal.js b/src/MountedTraversal.js index ad1b94326..2e96561cb 100644 --- a/src/MountedTraversal.js +++ b/src/MountedTraversal.js @@ -51,7 +51,8 @@ export function instHasClassName(inst, className) { if (!isDOMComponent(inst)) { return false; } - const classes = findDOMNode(inst).className || ''; + let classes = findDOMNode(inst).className || ''; + classes = classes.replace(/\s/g, ' ').trim(); return ` ${classes} `.indexOf(` ${className} `) > -1; } diff --git a/src/ShallowTraversal.js b/src/ShallowTraversal.js index 9d38c8408..6a8a9142a 100644 --- a/src/ShallowTraversal.js +++ b/src/ShallowTraversal.js @@ -28,7 +28,8 @@ export function childrenOfNode(node) { } export function hasClassName(node, className) { - const classes = propsOfNode(node).className || ''; + let classes = propsOfNode(node).className || ''; + classes = classes.replace(/\s/g, ' ').trim(); return ` ${classes} `.indexOf(` ${className} `) > -1; } diff --git a/test/ReactWrapper-spec.js b/test/ReactWrapper-spec.js index a8c28124a..a01e33a1f 100644 --- a/test/ReactWrapper-spec.js +++ b/test/ReactWrapper-spec.js @@ -900,6 +900,21 @@ describeWithDOM('mount', () => { expect(wrapper.is('.foo.bar')).to.equal(true); }); + it('should ignore insignificant whitespace', () => { + const className = ` + foo + `; + const wrapper = mount(
); + expect(wrapper.is('.foo')).to.equal(true); + }); + + it('should handle all significant whitespace', () => { + const className = `foo bar + baz`; + const wrapper = mount(
); + expect(wrapper.is('.foo.bar.baz')).to.equal(true); + }); + it('should return false when selector does not match', () => { const wrapper = mount(
); expect(wrapper.is('.foo')).to.equal(false); diff --git a/test/ShallowWrapper-spec.js b/test/ShallowWrapper-spec.js index 475bfb93d..05c924fd5 100644 --- a/test/ShallowWrapper-spec.js +++ b/test/ShallowWrapper-spec.js @@ -1007,6 +1007,20 @@ describe('shallow', () => { expect(wrapper.is('.foo.bar')).to.equal(true); }); + it('should ignore insignificant whitespace', () => { + const className = `foo + `; + const wrapper = shallow(
); + expect(wrapper.is('.foo')).to.equal(true); + }); + + it('should handle all significant whitespace', () => { + const className = `foo bar + baz`; + const wrapper = shallow(
); + expect(wrapper.is('.foo.bar.baz')).to.equal(true); + }); + it('should return false when selector does not match', () => { const wrapper = shallow(
); expect(wrapper.is('.foo')).to.equal(false);