react-highlight-words
Version:
React component to highlight words within a larger body of text
65 lines (54 loc) • 2.61 kB
JavaScript
import Highlighter from './Highlighter'
import expect from 'expect.js'
describe('Highlighter', () => {
function getHighlighterChildren (textToHighlight, searchWords, highlightClassName) {
const instance = Highlighter({ textToHighlight, searchWords, highlightClassName })
return instance.props.children
}
it('should properly handle empty searchText', () => {
expect(getHighlighterChildren('This is text', [])).to.eql(['This is text'])
expect(getHighlighterChildren('This is text', [''])).to.eql(['This is text'])
})
it('should properly handle empty textToHighlight', () => {
expect(getHighlighterChildren('', ['search']).length).to.eql([])
})
it('should highlight searchText words that exactly match words in textToHighlight', () => {
const matches = getHighlighterChildren('This is text', ['text'])
expect(matches.length).to.equal(2)
expect(matches[0]).to.equal('This is ')
expect(matches[1].props.children).to.equal('text')
})
it('should highlight searchText words that partial-match text in textToHighlight', () => {
const matches = getHighlighterChildren('This is text', ['Th'])
expect(matches.length).to.equal(2)
expect(matches[0].props.children).to.equal('Th')
expect(matches[1]).to.equal('is is text')
})
it('should highlight multiple occurrences of a searchText word', () => {
const matches = getHighlighterChildren('This is text', ['is'])
expect(matches.length).to.equal(5)
expect(matches[0]).to.equal('Th')
expect(matches[1].props.children).to.equal('is')
expect(matches[2]).to.equal(' ')
expect(matches[3].props.children).to.equal('is')
expect(matches[4]).to.equal(' text')
})
it('should highlight multiple searchText words', () => {
const matches = getHighlighterChildren('This is text', ['This', 'text'])
expect(matches.length).to.equal(3)
expect(matches[0].props.children).to.equal('This')
expect(matches[1]).to.equal(' is ')
expect(matches[2].props.children).to.equal('text')
})
it('should match terms in a case insensitive way but show their case-sensitive representation', () => {
const matches = getHighlighterChildren('This is text', ['this'])
expect(matches.length).to.equal(2)
expect(matches[0].props.children).to.equal('This')
expect(matches[1]).to.equal(' is text')
})
it('should use the :highlightClassName if specified', () => {
const matches = getHighlighterChildren('This is text', ['text'], 'customClass')
expect(matches.length).to.equal(2)
expect(matches[1].props.className).to.contain('customClass')
})
})