UNPKG

react-native-styled-text

Version:

A React Native component for easy rendering of styled text.

123 lines (109 loc) 4.5 kB
import { parse } from '../StyledText/parser'; let mockWarnings = []; const mockWarn = (msg) => mockWarnings.push(msg); describe('StyledText/parser', () => { beforeAll(() => { console['warn'] = mockWarn; }); beforeEach(() => { mockWarnings = []; }); describe('parseText', () => { it('should return text if not formatted', () => { const text = 'Testing <asdf adsf'; const mixedText = parse(text); expect(mixedText.length).toBe(1); expect(mixedText[0]).toBe(text); }); it('should return undefined if undefined', () => { const text = undefined; const mixedText = parse(text); expect(mixedText.length).toBe(1); expect(mixedText[0]).toBe(text); }); it('should return null if null', () => { const text = undefined; const mixedText = parse(text); expect(mixedText.length).toBe(1); expect(mixedText[0]).toBe(text); }); it('should return "" if ""', () => { const text = ''; const mixedText = parse(text); expect(mixedText.length).toBe(1); expect(mixedText[0]).toBe(text); }); it('should handle text if enclosed in tags', () => { const text = '<style1>Testing adsf</>'; const mixedText = parse(text); expect(mixedText.length).toBe(1); expect(mixedText[0].styleName).toBe('style1'); expect(mixedText[0].mixedText.length).toBe(1); expect(mixedText[0].mixedText[0]).toBe('Testing adsf'); }); it('should handle mixed text', () => { const text = 'Testing <style1>adsf</>234'; const mixedText = parse(text); expect(mixedText.length).toBe(3); expect(mixedText[0]).toBe('Testing '); expect(mixedText[1].styleName).toBe('style1'); expect(mixedText[1].mixedText.length).toBe(1); expect(mixedText[1].mixedText[0]).toBe('adsf'); expect(mixedText[2]).toBe('234'); }); it('should handle nested mixed text', () => { const text = 'Testing <style1>adsf<style2>text2</></>234'; const mixedText = parse(text); expect(mixedText.length).toBe(3); expect(mixedText[0]).toBe('Testing '); expect(mixedText[1].styleName).toBe('style1'); expect(mixedText[1].mixedText.length).toBe(2); expect(mixedText[1].mixedText[0]).toBe('adsf'); expect(mixedText[1].mixedText[1].styleName).toBe('style2'); expect(mixedText[1].mixedText[1].mixedText.length).toBe(1); expect(mixedText[1].mixedText[1].mixedText[0]).toBe('text2'); expect(mixedText[2]).toBe('234'); }); it('should handle missing end tags', () => { const text = 'Testing <style1>adsf<style2>text2</>234'; const mixedText = parse(text); expect(mixedText.length).toBe(2); expect(mixedText[0]).toBe('Testing '); expect(mixedText[1].styleName).toBe('style1'); expect(mixedText[1].mixedText.length).toBe(3); expect(mixedText[1].mixedText[0]).toBe('adsf'); expect(mixedText[1].mixedText[1].styleName).toBe('style2'); expect(mixedText[1].mixedText[1].mixedText.length).toBe(1); expect(mixedText[1].mixedText[1].mixedText[0]).toBe('text2'); expect(mixedText[1].mixedText[2]).toBe('234'); }); it('should handle named end tags', () => { const text = 'Testing <style1>adsf<style2>text2</style2>234'; const mixedText = parse(text); expect(mixedText.length).toBe(2); expect(mixedText[0]).toBe('Testing '); expect(mixedText[1].styleName).toBe('style1'); expect(mixedText[1].mixedText.length).toBe(3); expect(mixedText[1].mixedText[0]).toBe('adsf'); expect(mixedText[1].mixedText[1].styleName).toBe('style2'); expect(mixedText[1].mixedText[1].mixedText.length).toBe(1); expect(mixedText[1].mixedText[1].mixedText[0]).toBe('text2'); expect(mixedText[1].mixedText[2]).toBe('234'); }); it('should give warning on tag name mismatch', () => { const text = '<style1>adsf</style2>'; parse(text); expect(mockWarnings.length).toBe(1); expect(mockWarnings[0]).toContain('style name mismatch'); expect(mockWarnings[0]).toContain('style1'); expect(mockWarnings[0]).toContain('style2'); }); it('should give warning on unexpected end tag', () => { const text = 'adsf</style1>'; parse(text); expect(mockWarnings.length).toBe(1); expect(mockWarnings[0].toLowerCase()).toContain('unexpected end tag'); expect(mockWarnings[0]).toContain('style1'); }); }); });