-
Notifications
You must be signed in to change notification settings - Fork 195
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add infrastructure for easy direct testing of SVG output
(Run bootstrap-tests.js with e.g. babel-node to generate a new fixtures.js)
- Loading branch information
Showing
4 changed files
with
104 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
// This file is auto-updated by ../bootstrap-tests.js | ||
|
||
import React from 'react'; | ||
import {Sparklines, SparklinesLine} from '../src/Sparklines'; | ||
|
||
export default { | ||
// AUTO-GENERATED PART STARTS HERE | ||
'SimpleLine': {jsx: (<Sparklines data={[1, 2, 3]}><SparklinesLine /></Sparklines>), svg: ''} | ||
// AUTO-GENERATED PART ENDS HERE | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
import fixtures from './fixtures'; | ||
import {render} from 'enzyme'; | ||
import { expect } from 'chai'; | ||
|
||
describe('Graphical tests from fixtures.js', function() { | ||
for (let key of Object.keys(fixtures)) { | ||
describe(`${key}`, function() { | ||
it('should render as specified', function() { | ||
const wrapper = render(fixtures[key].jsx); | ||
expect(wrapper.html()).to.eq(fixtures[key].svg); | ||
}); | ||
}); | ||
} | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
import path from 'path'; | ||
import {render} from 'enzyme'; | ||
import LineByLineReader from 'line-by-line'; | ||
import reactElementToJsx from 'react-element-to-jsx-string'; | ||
|
||
const fixturesFile = path.resolve(__dirname, './__tests__/fixtures.js'); | ||
const dynamicPartStartSignal = '// AUTO-GENERATED PART STARTS HERE'; | ||
const dynamicPartEndSignal = '// AUTO-GENERATED PART ENDS HERE'; | ||
|
||
const fixtures = require(fixturesFile).default; | ||
|
||
// Output control | ||
let outData = ''; | ||
const write = content => { outData += content + '\n'; } | ||
const save = () => console.log(outData); | ||
function writeFixtures() { | ||
for (let key of Object.keys(fixtures)) { | ||
const jsx = fixtures[key].jsx; | ||
const wrapper = render(jsx); | ||
const jsxCode = `(${toOneLine(reactElementToJsx(jsx))})`; | ||
const htmlCode = JSON.stringify(wrapper.html()); | ||
|
||
write(`\t${JSON.stringify(key)}: {jsx: ${jsxCode}, html: ${htmlCode}},`); | ||
} | ||
} | ||
function toOneLine(code) { | ||
return code.replace(/\s*[\r\n]\s*/g, ' ').replace(/\s+/g, ' '); | ||
} | ||
|
||
// Input control | ||
const lr = new LineByLineReader(fixturesFile, {skipEmptyLines: false}); | ||
let inDynamicPart = false, dynamicPartCount = 0, lineCount = 0; | ||
|
||
lr.on('line', line => { | ||
++lineCount; | ||
if (line === dynamicPartStartSignal) { | ||
if (inDynamicPart) | ||
throw new LineError('Dynamic part opened again'); | ||
++dynamicPartCount; | ||
if (dynamicPartCount > 1) | ||
throw new LineError('Multiple dynamic parts found'); | ||
inDynamicPart = true; | ||
write(line); | ||
try { | ||
writeFixtures(); | ||
} catch(e) { | ||
throw new LineError(e); | ||
} | ||
} | ||
else if (line === dynamicPartEndSignal) { | ||
if (!inDynamicPart) | ||
throw new LineError('Dynamic part closed again'); | ||
inDynamicPart = false; | ||
write(line); | ||
} | ||
else if (!inDynamicPart) | ||
write(line); | ||
}); | ||
|
||
lr.on('end', () => { | ||
if (inDynamicPart) { | ||
throw new LineError('Dynamic part not closed'); | ||
} | ||
if (!dynamicPartCount) { | ||
throw new LineError('No dynamic part found in file!'); | ||
} | ||
save(); | ||
}); | ||
|
||
lr.on('error', function (err) { | ||
throw new LineError(err); | ||
}); | ||
|
||
class LineError extends Error { | ||
constructor(message) { | ||
super(`${fixturesFile}:${lineCount}: ${message}`); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters