react-native-styled-text
Version:
A React Native component for easy rendering of styled text.
74 lines (67 loc) • 2.44 kB
JavaScript
import {
scan,
Token,
TOKEN_BEGIN_TAG,
TOKEN_END_TAG,
TOKEN_TEXT,
} from '../StyledText/lexicalAnalyzer';
describe('StyledText/lexicalAnalyzer', () => {
describe('scan', () => {
it('should return text if plain text', () => {
const text = 'Testing <asdf adsf';
const tokens = scan(text);
expect(tokens.length).toBe(1);
expect(tokens[0].type).toBe(TOKEN_TEXT);
expect(tokens[0].lexeme).toBe(text);
});
it('should recognize start tag', () => {
const text = '<style1>';
const tokens = scan(text);
expect(tokens.length).toBe(1);
expect(tokens[0].type).toBe(TOKEN_BEGIN_TAG);
expect(tokens[0].lexeme).toBe('style1');
});
it('should recognize named end tag', () => {
const text = '</style1>';
const tokens = scan(text);
expect(tokens.length).toBe(1);
expect(tokens[0].type).toBe(TOKEN_END_TAG);
expect(tokens[0].lexeme).toBe('style1');
});
it('should recognize empty end tag', () => {
const text = '</>';
const tokens = scan(text);
expect(tokens.length).toBe(1);
expect(tokens[0].type).toBe(TOKEN_END_TAG);
expect(tokens[0].lexeme).toBe('');
});
it('should handle mixed text', () => {
const text = 'Testing <style1>adsf<style2>text2</style2>234';
const tokens = scan(text);
expect(tokens.length).toBe(7);
expect(tokens[0].type).toBe(TOKEN_TEXT);
expect(tokens[0].lexeme).toBe('Testing ');
expect(tokens[1].type).toBe(TOKEN_BEGIN_TAG);
expect(tokens[1].lexeme).toBe('style1');
expect(tokens[2].type).toBe(TOKEN_TEXT);
expect(tokens[2].lexeme).toBe('adsf');
expect(tokens[3].type).toBe(TOKEN_BEGIN_TAG);
expect(tokens[3].lexeme).toBe('style2');
expect(tokens[4].type).toBe(TOKEN_TEXT);
expect(tokens[4].lexeme).toBe('text2');
expect(tokens[5].type).toBe(TOKEN_END_TAG);
expect(tokens[5].lexeme).toBe('style2');
expect(tokens[6].type).toBe(TOKEN_TEXT);
expect(tokens[6].lexeme).toBe('234');
});
it('should translate > < "', () => {
const text = '<style1><">';
const tokens = scan(text);
expect(tokens.length).toBe(2);
expect(tokens[0].type).toBe(TOKEN_BEGIN_TAG);
expect(tokens[0].lexeme).toBe('style1');
expect(tokens[1].type).toBe(TOKEN_TEXT);
expect(tokens[1].lexeme).toBe('<">');
});
});
});