// needed for workaround, TODO remove
import { getLocator } from 'locate-character';

export function test({ assert, preprocessed, js, css }) {

	assert.deepEqual(
		preprocessed.map.names.sort(),
		['baritone', '--bazitone', 'old_name_1', 'old_name_2'].sort()
	);

	function test_name(old_name, new_name, where) {

		let loc = { character: -1 };
		while (loc = where.locate(new_name, loc.character + 1)) {
			const actualMapping = where.mapConsumer.originalPositionFor({
				line: loc.line + 1, column: loc.column
			});
			if (actualMapping.line === null) {
				// location is not mapped - ignore
				continue;
			}
			assert.equal(actualMapping.name, old_name);
		}
		if (loc === undefined) {
			// workaround for bug in locate-character, TODO remove
			// https://github.com/Rich-Harris/locate-character/pull/5
			where.locate = getLocator(where.code);
		}
	}

	test_name('baritone', 'bar', js);
	test_name('baritone', 'bar', preprocessed);

	test_name('--bazitone', '--baz', css);
	test_name('--bazitone', '--baz', preprocessed);

	test_name('old_name_1', 'new_name_1', js);
	test_name('old_name_1', 'new_name_1', preprocessed);

	test_name('old_name_2', 'new_name_2', js);
	test_name('old_name_2', 'new_name_2', preprocessed);
}