"use strict";

const formatLocation = require("../lib/util/formatLocation");

describe("formatLocation", () => {
	const testCases = [
		{
			name: "undefined",
			loc: undefined,
			result: ""
		},
		{
			name: "null",
			loc: null,
			result: ""
		},
		{
			name: "line-column",
			loc: {
				start: {
					line: 1,
					column: 2
				},
				end: {
					line: 3,
					column: 4
				}
			},
			result: "1:2-3:4"
		},
		{
			name: "line-column (same line)",
			loc: {
				start: {
					line: 1,
					column: 2
				},
				end: {
					line: 1,
					column: 4
				}
			},
			result: "1:2-4"
		},
		{
			name: "line-column (start only)",
			loc: {
				start: {
					line: 5,
					column: 6
				}
			},
			result: "5:6"
		},
		{
			name: "line",
			loc: {
				start: {
					line: 10
				},
				end: {
					line: 20
				}
			},
			result: "10-20"
		},
		{
			name: "line",
			loc: {
				start: null,
				end: /f/
			},
			result: ""
		},
		{
			name: "name with index",
			loc: { name: "foo", index: 3 },
			result: "foo[3]"
		},
		{
			name: "name only",
			loc: { name: "bar" },
			result: "bar"
		}
	];
	for (const testCase of testCases) {
		it(`should format location correctly for ${testCase.name}`, () => {
			expect(
				formatLocation(
					/** @type {import("../lib/Dependency").DependencyLocation} */ (
						testCase.loc
					)
				)
			).toEqual(testCase.result);
		});
	}
});
