UNPKG

babel-plugin-transform-jsx-stylesheet

Version:

Transform stylesheet selector to style in JSX Elements.

74 lines 8.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var syntaxJSX = require("babel-plugin-syntax-jsx"); var babel_core_1 = require("babel-core"); var constants_1 = require("../constants"); var index_1 = require("../index"); console.log('syntaxJSX', syntaxJSX); function getTransformCode(code, opts) { return (0, babel_core_1.transform)(code, { plugins: [ [index_1.default, opts], syntaxJSX, ], }).code; } exports.default = getTransformCode; describe('jsx style plugin', function () { it('transform only one className to style as member', function () { expect(getTransformCode("\nimport { createElement, Component } from 'rax';\nimport './app.css';\n\nclass App extends Component {\n render() {\n return <div className=\"header\" />;\n }\n}")).toBe("\nimport { createElement, Component } from 'rax';\nimport appStyleSheet from './app.css';\n\nvar _styleSheet = appStyleSheet;\nclass App extends Component {\n render() {\n return <div style={_styleSheet[\"header\"]} />;\n }\n}"); }); it('transform multiple classNames to style as array', function () { expect(getTransformCode("\nimport { createElement, Component } from 'rax';\nimport './app.css';\n\nclass App extends Component {\n render() {\n return <div className=\"header1 header2\" />;\n }\n}")).toBe("\nimport { createElement, Component } from 'rax';\nimport appStyleSheet from './app.css';\n\nvar _styleSheet = appStyleSheet;\nclass App extends Component {\n render() {\n return <div style={Object.assign({}, _styleSheet[\"header1\"], _styleSheet[\"header2\"])} />;\n }\n}"); }); it('transform array, object and expressions', function () { expect(getTransformCode("\nimport { createElement, Component } from 'rax';\nimport './app.css';\n\nclass App extends Component {\n render() {\n return <div className={'header'}>\n <div className={{ active: props.isActive }} />\n <div className={['header1 header2', 'header3', { active: props.isActive }]} />\n <div className={props.visible ? 'show' : 'hide'} />\n <div className={getClassName()} />\n </div>;\n }\n}")).toBe("\nimport { createElement, Component } from 'rax';\nimport appStyleSheet from './app.css';\n\nvar _styleSheet = appStyleSheet;\n\n".concat((0, constants_1.getClassNameFunctionString)(), "\n\n").concat((0, constants_1.getStyleFunctionString)(), "\n\nclass App extends Component {\n render() {\n return <div style={_styleSheet[\"header\"]}>\n <div style={_getStyle({ active: props.isActive })} />\n <div style={_getStyle(['header1 header2', 'header3', { active: props.isActive }])} />\n <div style={_getStyle(props.visible ? 'show' : 'hide')} />\n <div style={_getStyle(getClassName())} />\n </div>;\n }\n}")); }); it('combine one style and className', function () { expect(getTransformCode("\nimport { createElement, Component } from 'rax';\nimport './app.css';\nimport styles from './style.css';\n\nclass App extends Component {\n render() {\n return <div className=\"header2\" style={styles.header1} />;\n }\n}")).toBe("\nimport { createElement, Component } from 'rax';\nimport appStyleSheet from './app.css';\nimport styles from './style.css';\n\nvar _styleSheet = appStyleSheet;\nclass App extends Component {\n render() {\n return <div style={Object.assign({}, _styleSheet[\"header2\"], styles.header1)} />;\n }\n}"); }); it('combine inline style object and className', function () { expect(getTransformCode("\nimport { createElement, Component } from 'rax';\nimport './app.css';\n\nclass App extends Component {\n render() {\n return <div className=\"header\" style={{\n height: 100\n }} />;\n }\n}")).toBe("\nimport { createElement, Component } from 'rax';\nimport appStyleSheet from './app.css';\n\nvar _styleSheet = appStyleSheet;\nclass App extends Component {\n render() {\n return <div style={Object.assign({}, _styleSheet[\"header\"], {\n height: 100\n })} />;\n }\n}"); }); it('combine multiple styles and className', function () { expect(getTransformCode("\nimport { createElement, Component } from 'rax';\nimport './app.css';\nimport styles from './style.css';\n\nclass App extends Component {\n render() {\n return <div className=\"header2\" style={[styles.header1, styles.header3]} />;\n }\n}")).toBe("\nimport { createElement, Component } from 'rax';\nimport appStyleSheet from './app.css';\nimport styles from './style.css';\n\nvar _styleSheet = appStyleSheet;\nclass App extends Component {\n render() {\n return <div style={[_styleSheet[\"header2\"], styles.header1, styles.header3]} />;\n }\n}"); }); it('do not transfrom code when no css file', function () { var code = "\nimport { createElement, Component } from 'rax';\n\nclass App extends Component {\n render() {\n return <div className=\"header\" />;\n }\n}"; expect(getTransformCode(code)).toBe(code); }); it('transform scss file', function () { expect(getTransformCode("\nimport { createElement, Component } from 'rax';\nimport './app.scss';\n\nclass App extends Component {\n render() {\n return <div className=\"header\" />;\n }\n}")).toBe("\nimport { createElement, Component } from 'rax';\nimport appStyleSheet from './app.scss';\n\nvar _styleSheet = appStyleSheet;\nclass App extends Component {\n render() {\n return <div style={_styleSheet[\"header\"]} />;\n }\n}"); }); it('transform constant elements in render', function () { expect(getTransformCode("\nimport { createElement, render } from 'rax';\nimport './app.css';\n\nrender(<div className=\"header\" />);\n")).toBe("\nimport { createElement, render } from 'rax';\nimport appStyleSheet from './app.css';\n\nvar _styleSheet = appStyleSheet;\nrender(<div style={_styleSheet[\"header\"]} />);"); }); it('dont remove className', function () { expect(getTransformCode("\nimport { createElement, render } from 'rax';\nimport './app.css';\n\nrender(<div className=\"header\" />);\n", { retainClassName: true })).toBe("\nimport { createElement, render } from 'rax';\nimport appStyleSheet from './app.css';\n\nvar _styleSheet = appStyleSheet;\nrender(<div className=\"header\" style={_styleSheet[\"header\"]} />);"); }); }); describe('test development env', function () { var lastEnv; beforeEach(function () { lastEnv = process.env.NODE_ENV; process.env.NODE_ENV = 'development'; }); it('transform constant element in development env', function () { expect(getTransformCode("\nimport { createElement, render } from 'rax';\nimport './app.css';\n\nrender(<div className=\"header\" />);\n")).toBe("\nimport { createElement, render } from 'rax';\nimport appStyleSheet from './app.css';\n\nvar _styleSheet = appStyleSheet;\nrender(<div __class=\"header\" style={_styleSheet[\"header\"]} />);"); }); afterEach(function () { process.env.NODE_ENV = lastEnv; }); }); describe('edge test', function () { it('transform class and style import same file', function () { expect(getTransformCode("\nimport { createElement, render } from 'rax';\nimport './app.css';\nimport styles from './app.css';\n\nrender(<div className=\"header1\" style={styles.header} />);\n")).toBe("\nimport { createElement, render } from 'rax';\nimport appStyleSheet from './app.css';\nimport styles from './app.css';\n\nvar _styleSheet = appStyleSheet;\nrender(<div style={Object.assign({}, _styleSheet[\"header1\"], styles.header)} />);"); }); it('should transform two class files', function () { expect(getTransformCode("\nimport { createElement, render } from 'rax';\nimport './app1.css';\nimport './app2.css';\n\nrender(<div className=\"header1 header2\" />);\n")).toBe("".concat((0, constants_1.mergeStylesFunctionString)(), "\n\nimport { createElement, render } from 'rax';\nimport app1StyleSheet from './app1.css';\nimport app2StyleSheet from './app2.css';\n\nvar _styleSheet = _mergeStyles(app1StyleSheet, app2StyleSheet);\n\nrender(<div style={Object.assign({}, _styleSheet[\"header1\"], _styleSheet[\"header2\"])} />);")); }); it('should delete className attr when empty string', function () { expect(getTransformCode("\nimport { createElement, render } from 'rax';\nimport 'app.css'\n\nrender(<div className=\"\" />);\n")).toBe("\nimport { createElement, render } from 'rax';\nimport appStyleSheet from 'app.css';\n\nvar _styleSheet = appStyleSheet;\nrender(<div />);"); }); }); //# sourceMappingURL=index.js.map