// SPDX-License-Identifier: LGPL-3.0-or-later
import assert from 'node:assert/strict';
import { suite, test } from 'node:test';
import { basename, dirname, extname, join, normalize, resolve } from '@zenfs/core/path';
import { fs } from '@zenfs/core';

suite('Path emulation', () => {
	test('resolve', () => {
		assert.equal(resolve('somepath'), '/somepath');
		assert.equal(resolve('/another', 'path'), '/another/path');
	});

	test('join', () => {
		assert.equal(join('/path', 'to', 'file.txt'), '/path/to/file.txt');
		assert.equal(join('/path/', 'to', '/file.txt'), '/path/to/file.txt');
	});

	test('normalize', () => {
		assert.equal(normalize('/path/to/../file.txt'), '/path/file.txt');
		assert.equal(normalize('/path/to/./file.txt'), '/path/to/file.txt');
	});

	test('basename', () => {
		assert.equal(basename('/path/to/file.txt'), 'file.txt');
		assert.equal(basename('/path/to/file.txt', '.txt'), 'file');
	});

	test('dirname', () => {
		assert.equal(dirname('/path/to/file.txt'), '/path/to');
	});

	test('extname', () => {
		assert.equal(extname('/path/to/file.txt'), '.txt');
		assert.equal(extname('/path/to/file'), '');
	});

	test('file:// URL (string)', () => {
		fs.writeFileSync('/example.txt', 'Yay');
		assert.equal(fs.readFileSync('file:///example.txt', 'utf-8'), 'Yay');
	});

	test('file:// URL (URL)', () => {
		fs.writeFileSync('/example.txt', 'Yay');
		const url = new URL('file:///example.txt');
		assert.equal(fs.readFileSync(url, 'utf-8'), 'Yay');
	});
});
