import assert from 'assert';
import {svelte} from '../helpers.js';
describe('preprocess', () => {
	it('preprocesses entire component', () => {
		const source = `
			
Hello __NAME__!
		`;
		const expected = `
			Hello world!
		`;
		return svelte.preprocess(source, {
			markup: ({ content }) => {
				return {
					code: content.replace('__NAME__', 'world')
				};
			}
		}).then(processed => {
			assert.equal(processed.toString(), expected);
		});
	});
	it('preprocesses style', () => {
		const source = `
			$brand
			
		`;
		const expected = `
			$brand
			
		`;
		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 = `
			$brand
			
		`;
		const expected = `
			$brand
			
		`;
		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 = `
			
		`;
		const expected = `
			
		`;
		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 = `
			
		`;
		return svelte.preprocess(source, {
			style: ({ attributes }) => {
				assert.deepEqual(attributes, {
					type: 'text/scss',
					'data-foo': 'bar',
					bool: true
				});
			}
		});
	});
	it('ignores null/undefined returned from preprocessor', () => {
		const source = `
			
		`;
		const expected = `
			
		`;
		return svelte.preprocess(source, {
			script: () => null
		}).then(processed => {
			assert.equal(processed.toString(), expected);
		});
	});
});