import assert from 'assert'; import {svelte} from '../helpers.js'; describe('preprocess', () => { it('preprocesses entire component', () => { const source = ` <h1>Hello __NAME__!</h1> `; const expected = ` <h1>Hello world!</h1> `; return svelte.preprocess(source, { markup: ({ content }) => { return { code: content.replace('__NAME__', 'world') }; } }).then(processed => { assert.equal(processed.toString(), expected); }); }); it('preprocesses style', () => { const source = ` <div class='brand-color'>$brand</div> <style> .brand-color { color: $brand; } </style> `; const expected = ` <div class='brand-color'>$brand</div> <style> .brand-color { color: purple; } </style> `; return svelte.preprocess(source, { style: ({ content }) => { return { code: content.replace('$brand', 'purple') }; } }).then(processed => { assert.equal(processed.toString(), expected); }); }); it('preprocesses style asynchronously', () => { const source = ` <div class='brand-color'>$brand</div> <style> .brand-color { color: $brand; } </style> `; const expected = ` <div class='brand-color'>$brand</div> <style> .brand-color { color: purple; } </style> `; return svelte.preprocess(source, { style: ({ content }) => { return Promise.resolve({ code: content.replace('$brand', 'purple') }); } }).then(processed => { assert.equal(processed.toString(), expected); }); }); it('preprocesses script', () => { const source = ` <script> console.log(__THE_ANSWER__); </script> `; const expected = ` <script> console.log(42); </script> `; return svelte.preprocess(source, { script: ({ content }) => { return { code: content.replace('__THE_ANSWER__', '42') }; } }).then(processed => { assert.equal(processed.toString(), expected); }); }); it('parses attributes', () => { const source = ` <style type='text/scss' data-foo="bar" bool></style> `; return svelte.preprocess(source, { style: ({ attributes }) => { assert.deepEqual(attributes, { type: 'text/scss', 'data-foo': 'bar', bool: true }); } }); }); it('provides filename to processing hooks', () => { const source = ` <h1>Hello __MARKUP_FILENAME__!</h1> <style>.red { color: __STYLE_FILENAME__; }</style> <script>console.log('__SCRIPT_FILENAME__');</script> `; const expected = ` <h1>Hello file.html!</h1> <style>.red { color: file.html; }</style> <script>console.log('file.html');</script> `; return svelte.preprocess(source, { filename: 'file.html', markup: ({ content, filename }) => { return { code: content.replace('__MARKUP_FILENAME__', filename) }; }, style: ({ content, filename }) => { return { code: content.replace('__STYLE_FILENAME__', filename) }; }, script: ({ content, filename }) => { return { code: content.replace('__SCRIPT_FILENAME__', filename) }; } }).then(processed => { assert.equal(processed.toString(), expected); }); }); it('ignores null/undefined returned from preprocessor', () => { const source = ` <script> console.log('ignore me'); </script> `; const expected = ` <script> console.log('ignore me'); </script> `; return svelte.preprocess(source, { script: () => null }).then(processed => { assert.equal(processed.toString(), expected); }); }); });