"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Red Hat, Inc. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
const chai_1 = require("chai");
const src_1 = require("../src");
const schemaRequestHandler_1 = require("../src/languageservice/services/schemaRequestHandler");
const testHelper_1 = require("./utils/testHelper");
/**
 * Builds a simple schema request service
 * @param contentMap Mapping of a schema uri to the schema content
 */
function schemaRequestServiceBuilder(contentMap) {
    return async (uri) => {
        return contentMap[uri];
    };
}
describe('getLanguageService()', () => {
    it('successfully creates an instance without optional arguments', () => {
        (0, src_1.getLanguageService)({
            schemaRequestService: {},
            workspaceContext: {},
        });
    });
    describe('minimal language service hover happy path', () => {
        const schemaUri = 'my.schema.uri';
        const schemaContentMap = {};
        let schemaRequestService;
        let textDocument;
        let hoverPosition; // Position the 'mouse' is hovering on the content
        let minimalYamlService;
        before(async () => {
            // Setup object that resolves schema content
            schemaContentMap[schemaUri] = `
        {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
                "firstName": {
                "type": "string",
                "description": "The person's first name."
                }
            }
        }
      `;
            schemaRequestService = schemaRequestServiceBuilder(schemaContentMap);
            // Setup the document and where the hover is on it
            const contentWithHoverPosition = 'fi|r|stName: "Nikolas"';
            const { content, position: offset } = (0, testHelper_1.caretPosition)(contentWithHoverPosition);
            textDocument = (0, testHelper_1.setupSchemaIDTextDocument)(content);
            hoverPosition = textDocument.positionAt(offset);
            // Setup minimal language service + indicate to provide hover functionality
            minimalYamlService = (0, src_1.getLanguageService)({
                schemaRequestService: schemaRequestService,
                workspaceContext: schemaRequestHandler_1.workspaceContext,
            });
            minimalYamlService.configure({
                hover: true,
                schemas: [
                    {
                        fileMatch: [textDocument.uri],
                        uri: schemaUri,
                    },
                ],
            });
        });
        it('successfully creates an instance without optional arguments', async () => {
            const result = await minimalYamlService.doHover(textDocument, hoverPosition);
            chai_1.assert.deepEqual(result, {
                contents: {
                    kind: 'markdown',
                    value: "The person's first name.\n\nSource: [my.schema.uri](my.schema.uri)",
                },
                range: {
                    start: {
                        line: 0,
                        character: 0,
                    },
                    end: {
                        line: 0,
                        character: 9,
                    },
                },
            });
        });
    });
});
//# sourceMappingURL=yamlLanguageService.test.js.map