import JSX from '../jsx.classic'; import { isFunction } from '../../code/utils'; describe('JSX classic engine', () => { it('base test', () => { expect(isFunction(JSX.createElement)).toBeTruthy(); }); it('n-hide', () => { const e = JSX.createElement('div', { 'n-hide': true }); expect(e).toEqual('
'); }); it('n-show', () => { const e = JSX.createElement('div', { 'n-show': true }); expect(e).toEqual('
'); }); it('n-hide', () => { const e = JSX.createElement('div', { 'n-hide': false }); expect(e).toEqual('
'); }); it('n-show', () => { const e = JSX.createElement('div', { 'n-show': false }); expect(e).toEqual('
'); }); it('n-if', () => { const e = JSX.createElement('div', { 'n-if': false }); expect(e).toEqual(''); }); it('n-if', () => { const e = JSX.createElement('div', { 'n-if': true }); expect(e).toEqual('
'); }); it('n-else', () => { const e = JSX.createElement('div', { 'n-else': true }); expect(e).toEqual(''); }); it('n-else', () => { const e = JSX.createElement('div', { 'n-else': false }); expect(e).toEqual('
'); }); it('n-iif', () => { const e = JSX.createElement('div', { 'n-iif': true, 'value': { name: 'field' } }); expect(e).toEqual('
'); }); it('n-expand', () => { const e = JSX.createElement('div', { 'n-expand': 'notset' }); expect(e).toEqual('
'); }); it('n-on-click', () => { function clickTest() { } const e = JSX.createElement('div', { 'n-on-click': clickTest }); expect(e).toEqual('
'); }); it('n-on-click with lambda', () => { function clickTest() { } const e = JSX.createElement('div', { 'n-on-click': e => this.clickTest() }); expect(e).toEqual('
this.clickTest()\'>
'); }); it('n-repeat throws error with wrong data', () => { const mockConsole = { error: jest.fn() // (text: string) => {} }; const legacy = console.error; console.error = mockConsole.error; const spyError = jest.spyOn(mockConsole, 'error'); const e = JSX.createElement('div', { 'n-repeat': "[1, 2, 3]" }); expect(spyError).toBeCalled(); console.error = legacy; }); it('n-repeat with proper data', () => { const mockConsole = { error: jest.fn() // (text: string) => {} }; const legacy = console.error; console.error = mockConsole.error; const spyError = jest.spyOn(mockConsole, 'error'); const mockData = JSON.stringify([{ foo: 1 }, { foo: 2 }, { foo: 3 }]); const e = JSX.createElement('div', { 'data-item': 'foo', 'n-repeat': mockData }); expect(spyError).not.toBeCalled(); expect(e).toEqual("
"); console.error = legacy; }); it('n-repeat with proper data and keep static props', () => { const mockConsole = { error: jest.fn() // (text: string) => {} }; const legacy = console.error; console.error = mockConsole.error; const spyError = jest.spyOn(mockConsole, 'error'); const mockData = JSON.stringify([{ foo: 1 }, { foo: 2 }, { foo: 3 }]); const e = JSX.createElement('div', { 'data-item': 'foo', 'data-text': 'text', 'n-repeat': mockData }); expect(spyError).not.toBeCalled(); expect(e).toEqual("
"); console.error = legacy; }); it('n-repeat with multiple bindings', () => { const mockConsole = { error: jest.fn() // (text: string) => {} }; const legacy = console.error; console.error = mockConsole.error; const spyError = jest.spyOn(mockConsole, 'error'); const mockData = JSON.stringify([{ foo: 1, bar: 'A' }, { foo: 2, bar: 'B' }, { foo: 3, bar: 'C' }]); const e = JSX.createElement('div', { 'data-item': 'foo', 'data-text': 'bar', 'n-repeat': mockData }); expect(spyError).not.toBeCalled(); expect(e).toEqual("
"); console.error = legacy; }); it('class', () => { const e = JSX.createElement('div', { 'class': 'btn btn-sm' }); expect(e).toEqual('
'); }); it('class array', () => { const e = JSX.createElement('div', { 'class': ['btn btn-sm', 'btn-primary'] }); expect(e).toEqual('
'); }); it('values --> boolean', () => { const e = JSX.createElement('div', { 'param': false }); expect(e).toEqual('
'); }); it('values --> array', () => { const e = JSX.createElement('div', { 'param': ['red pill', 'blue pill'] }); expect(e).toEqual('
'); }); it('values --> object', () => { const e = JSX.createElement('div', { 'param': { test: 123 } }); expect(e).toEqual('
'); }); it('values --> number', () => { const e = JSX.createElement('div', { 'param': 23 }); expect(e).toEqual('
'); }); it('values --> string ""', () => { const e = JSX.createElement('div', { 'param': 'Something with "quotes"' }); expect(e).toEqual('
'); }); it('values --> string \'\'', () => { const e = JSX.createElement('div', { 'param': "Something with 'quotes'" }); expect(e).toEqual('
'); }); it('values --> string ', () => { const e = JSX.createElement('div', { 'param': "Something" }); expect(e).toEqual('
'); }); it('Fragment', () => { const e = JSX.createElement(''); expect(e).toEqual(''); }); it('Fragment with children', () => { const e = JSX.createElement('', null, JSX.createElement('div')); expect(e).toEqual('
'); }); it('Undefined value', () => { const e = JSX.createElement('div', { 'param': undefined }); expect(e).toEqual('
'); }); })