@@ -2,10 +2,10 @@ import basicRender from '../src/index.js';
22import { render } from '../src/jsx.js' ;
33import { h , Fragment } from 'preact' ;
44import { expect } from 'chai' ;
5- import { dedent } from './utils.js' ;
5+ import { dedent , svgAttributes , htmlAttributes } from './utils.js' ;
66
77describe ( 'pretty' , ( ) => {
8- let prettyRender = ( jsx ) => render ( jsx , { } , { pretty : true } ) ;
8+ let prettyRender = ( jsx , opts ) => render ( jsx , { } , { pretty : true , ... opts } ) ;
99
1010 it ( 'should render no whitespace by default' , ( ) => {
1111 let rendered = basicRender (
@@ -196,4 +196,56 @@ describe('pretty', () => {
196196 it ( 'should not render function children' , ( ) => {
197197 expect ( prettyRender ( < div > { ( ) => { } } </ div > ) ) . to . equal ( '<div></div>' ) ;
198198 } ) ;
199+
200+ it ( 'should render SVG elements' , ( ) => {
201+ let rendered = prettyRender (
202+ < svg >
203+ < image xlinkHref = "#" />
204+ < foreignObject >
205+ < div xlinkHref = "#" />
206+ </ foreignObject >
207+ < g >
208+ < image xlinkHref = "#" />
209+ </ g >
210+ </ svg >
211+ ) ;
212+
213+ expect ( rendered ) . to . equal (
214+ `<svg>\n\t<image xlink:href="#"></image>\n\t<foreignObject>\n\t\t<div xlink:href="#"></div>\n\t</foreignObject>\n\t<g>\n\t\t<image xlink:href="#"></image>\n\t</g>\n</svg>`
215+ ) ;
216+ } ) ;
217+
218+ describe ( 'Attribute casing' , ( ) => {
219+ it ( 'should have correct SVG casing' , ( ) => {
220+ for ( let name in svgAttributes ) {
221+ let value = svgAttributes [ name ] ;
222+
223+ let rendered = prettyRender (
224+ < svg >
225+ < path { ...{ [ name ] : 'foo' } } />
226+ </ svg >
227+ ) ;
228+ expect ( rendered ) . to . equal (
229+ `<svg>\n\t<path ${ value } ="foo"></path>\n</svg>`
230+ ) ;
231+ }
232+ } ) ;
233+
234+ it ( 'should have correct HTML casing' , ( ) => {
235+ for ( let name in htmlAttributes ) {
236+ let value = htmlAttributes [ name ] ;
237+
238+ if ( name === 'checked' ) {
239+ let rendered = prettyRender ( < input type = "checkbox" checked /> , {
240+ jsx : false
241+ } ) ;
242+ expect ( rendered ) . to . equal ( `<input type="checkbox" checked />` ) ;
243+ continue ;
244+ } else {
245+ let rendered = prettyRender ( < div { ...{ [ name ] : 'foo' } } /> ) ;
246+ expect ( rendered ) . to . equal ( `<div ${ value } ="foo"></div>` ) ;
247+ }
248+ }
249+ } ) ;
250+ } ) ;
199251} ) ;
0 commit comments