Path: blob/main/src/vs/workbench/contrib/chat/test/browser/languageModelsConfiguration.test.ts
4780 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';7import { createTextModel } from '../../../../../editor/test/common/testTextModel.js';8import { parseLanguageModelsProviderGroups } from '../../browser/languageModelsConfigurationService.js';910suite('LanguageModelsConfiguration', () => {11const testDisposables = ensureNoDisposablesAreLeakedInTestSuite();1213test('parseLanguageModelsConfiguration - empty', () => {14const model = testDisposables.add(createTextModel('[]'));15const result = parseLanguageModelsProviderGroups(model);16assert.deepStrictEqual(result, []);17});1819test('parseLanguageModelsConfiguration - simple', () => {20const content = JSON.stringify([{21vendor: 'vendor',22name: 'group',23configurations: []24}], null, '\t');25const model = testDisposables.add(createTextModel(content));26const result = parseLanguageModelsProviderGroups(model);2728assert.strictEqual(result.length, 1);29assert.strictEqual(result[0].name, 'group');30assert.strictEqual(result[0].vendor, 'vendor');31assert.ok(result[0].range);32});3334test('parseLanguageModelsConfiguration - with configuration range', () => {35const content = `[36{37"vendor": "vendor",38"name": "group",39"configurations": [40{41"configuration": {42"foo": "bar"43}44}45]46}47]`;48const model = testDisposables.add(createTextModel(content));49const result = parseLanguageModelsProviderGroups(model);5051const configurations = result[0].configurations as { configuration: Record<string, unknown> }[];52const config = configurations[0].configuration;53assert.deepStrictEqual(config, { foo: 'bar' });54});5556test('parseLanguageModelsConfiguration - multiple vendors and groups', () => {57const content = `[58{ "vendor": "vendor1", "name": "g1", "configurations": [] },59{ "vendor": "vendor1", "name": "g2", "configurations": [] },60{ "vendor": "vendor2", "name": "g3", "configurations": [] }61]`;62const model = testDisposables.add(createTextModel(content));63const result = parseLanguageModelsProviderGroups(model);6465assert.strictEqual(result.length, 3);66assert.strictEqual(result[0].name, 'g1');67assert.strictEqual(result[0].vendor, 'vendor1');68assert.strictEqual(result[1].name, 'g2');69assert.strictEqual(result[1].vendor, 'vendor1');70assert.strictEqual(result[2].name, 'g3');71assert.strictEqual(result[2].vendor, 'vendor2');72});7374test('parseLanguageModelsConfiguration - complex configuration values', () => {75const content = `[76{77"vendor": "vendor",78"name": "group",79"configurations": [80{81"configuration": {82"str": "value",83"num": 123,84"bool": true,85"null": null,86"arr": [1, 2],87"obj": { "nested": "val" }88}89}90]91}92]`;93const model = testDisposables.add(createTextModel(content));94const result = parseLanguageModelsProviderGroups(model);9596const configurations = result[0]?.configurations as { configuration: Record<string, unknown> }[];97const config = configurations[0].configuration;98assert.strictEqual(config.str, 'value');99assert.strictEqual(config.num, 123);100assert.strictEqual(config.bool, true);101assert.strictEqual(config.null, null);102assert.deepStrictEqual(config.arr, [1, 2]);103assert.deepStrictEqual(config.obj, { nested: 'val' });104});105106test('parseLanguageModelsConfiguration - with comments', () => {107const content = `[108// This is a comment109/* Block comment */110{111"vendor": "vendor",112"name": "group",113"configurations": []114}115]`;116const model = testDisposables.add(createTextModel(content));117const result = parseLanguageModelsProviderGroups(model);118119assert.strictEqual(result.length, 1);120assert.strictEqual(result[0].name, 'group');121assert.strictEqual(result[0].vendor, 'vendor');122});123124test('parseLanguageModelsConfiguration - ranges', () => {125const content = `[126{127"vendor": "vendor",128"name": "g1",129"configurations": []130},131{132"vendor": "vendor",133"name": "g2",134"configurations": []135}136]`;137const model = testDisposables.add(createTextModel(content));138const result = parseLanguageModelsProviderGroups(model);139140const g1 = result[0];141const g2 = result[1];142143assert.ok(g1.range);144assert.ok(g2.range);145assert.strictEqual(g1.range.startLineNumber, 2);146assert.strictEqual(g1.range.endLineNumber, 6);147assert.strictEqual(g2.range.startLineNumber, 7);148assert.strictEqual(g2.range.endLineNumber, 11);149});150});151152153