Path: blob/main/extensions/copilot/src/extension/prompt/node/test/codeGuesser.spec.ts
13405 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 { suite, test } from 'vitest';7import { looksLikeCode } from '../../common/codeGuesser';89suite('codeGuesser', () => {1011test('looksLikeCode - detects JavaScript configuration as code', () => {12const jsConfigSnippet = `'prefer-const': 'off',`;13assert.strictEqual(looksLikeCode(jsConfigSnippet), true);14});1516test('looksLikeCode - detects code-like text', () => {17const codeSnippet = 'function test() { return true; }';18assert.strictEqual(looksLikeCode(codeSnippet), true);19});2021test('looksLikeCode - detects non-code text', () => {22const nonCodeSnippet = 'This is a regular sentence.';23assert.strictEqual(looksLikeCode(nonCodeSnippet), false);24});2526test('looksLikeCode - detects empty string', () => {27const emptyString = '';28assert.strictEqual(looksLikeCode(emptyString), false);29});3031test('looksLikeCode - detects HTML as code', () => {32const htmlSnippet = '<div>Hello World</div>';33assert.strictEqual(looksLikeCode(htmlSnippet), true);34});3536test('looksLikeCode - detects JSON as code', () => {37const jsonSnippet = '{"key": "value"}';38assert.strictEqual(looksLikeCode(jsonSnippet), true);39});4041test('looksLikeCode - detects CSS as code', () => {42const cssSnippet = 'body { background-color: #fff; }';43assert.strictEqual(looksLikeCode(cssSnippet), true);44});4546test('looksLikeCode - detects SQL as code', () => {47const sqlSnippet = 'SELECT * FROM users WHERE id = 1;';48assert.strictEqual(looksLikeCode(sqlSnippet), true);49});5051test('looksLikeCode - detects Python as code', () => {52const pythonSnippet = 'def test(): return True';53assert.strictEqual(looksLikeCode(pythonSnippet), true);54});5556test('looksLikeCode - detects Java as code', () => {57const javaSnippet = 'public class Test { public static void main(String[] args) { } }';58assert.strictEqual(looksLikeCode(javaSnippet), true);59});6061test('looksLikeCode - detects C++ as code', () => {62const cppSnippet = 'int main() { return 0; }';63assert.strictEqual(looksLikeCode(cppSnippet), true);64});6566test('looksLikeCode - detects Ruby as code', () => {67const rubySnippet = 'def test; true; end';68assert.strictEqual(looksLikeCode(rubySnippet), true);69});7071test('looksLikeCode - detects PHP as code', () => {72const phpSnippet = '<?php echo "Hello World"; ?>';73assert.strictEqual(looksLikeCode(phpSnippet), true);74});7576test('looksLikeCode - detects XML as code', () => {77const xmlSnippet = '<note><to>Tove</to></note>';78assert.strictEqual(looksLikeCode(xmlSnippet), true);79});8081test.skip('looksLikeCode - detects YAML as code', () => {82const yamlSnippet = 'key: value';83assert.strictEqual(looksLikeCode(yamlSnippet), true);84});8586test.skip('looksLikeCode - detects Markdown as non-code', () => {87const markdownSnippet = '# This is a heading';88assert.strictEqual(looksLikeCode(markdownSnippet), false);89});9091test('looksLikeCode - detects plain text as non-code', () => {92const plainTextSnippet = 'Just some plain text.';93assert.strictEqual(looksLikeCode(plainTextSnippet), false);94});9596test.skip('looksLikeCode - detects shell script as code', () => {97const shellSnippet = 'echo "Hello World"';98assert.strictEqual(looksLikeCode(shellSnippet), true);99});100101test('looksLikeCode - detects TypeScript as code', () => {102const tsSnippet = 'const test: boolean = true;';103assert.strictEqual(looksLikeCode(tsSnippet), true);104});105106test('looksLikeCode - detects Swift as code', () => {107const swiftSnippet = 'func test() -> Bool { return true }';108assert.strictEqual(looksLikeCode(swiftSnippet), true);109});110111test('looksLikeCode - detects Kotlin as code', () => {112const kotlinSnippet = 'fun test(): Boolean { return true }';113assert.strictEqual(looksLikeCode(kotlinSnippet), true);114});115116test('looksLikeCode - detects Go as code', () => {117const goSnippet = 'func main() { fmt.Println("Hello World") }';118assert.strictEqual(looksLikeCode(goSnippet), true);119});120121test('looksLikeCode - detects Rust as code', () => {122const rustSnippet = 'fn main() { println!("Hello World"); }';123assert.strictEqual(looksLikeCode(rustSnippet), true);124});125126test('looksLikeCode - detects Perl as code', () => {127const perlSnippet = 'print "Hello World";';128assert.strictEqual(looksLikeCode(perlSnippet), true);129});130131test('looksLikeCode - detects Lua as code', () => {132const luaSnippet = 'print("Hello World")';133assert.strictEqual(looksLikeCode(luaSnippet), true);134});135136test('looksLikeCode - detects R as code', () => {137const rSnippet = 'print("Hello World")';138assert.strictEqual(looksLikeCode(rSnippet), true);139});140141test('looksLikeCode - detects multiline JavaScript as code', () => {142const jsSnippet = `143function add(a, b) {144return a + b;145}146console.log(add(2, 3));147`;148assert.strictEqual(looksLikeCode(jsSnippet), true);149});150151test('looksLikeCode - detects multiline Python as code', () => {152const pythonSnippet = `153def add(a, b):154return a + b155156print(add(2, 3))157`;158assert.strictEqual(looksLikeCode(pythonSnippet), true);159});160161test('looksLikeCode - detects multiline HTML as code', () => {162const htmlSnippet = `163<!DOCTYPE html>164<html>165<head>166<title>Test</title>167</head>168<body>169<p>Hello World</p>170</body>171</html>172`;173assert.strictEqual(looksLikeCode(htmlSnippet), true);174});175176test('looksLikeCode - detects multiline CSS as code', () => {177const cssSnippet = `178body {179background-color: #fff;180color: #333;181}182h1 {183font-size: 2em;184}185`;186assert.strictEqual(looksLikeCode(cssSnippet), true);187});188189test('looksLikeCode - detects multiline SQL as code', () => {190const sqlSnippet = `191SELECT id, name192FROM users193WHERE active = 1194ORDER BY name;195`;196assert.strictEqual(looksLikeCode(sqlSnippet), true);197});198199test('looksLikeCode - detects natural language response as non-code', () => {200const naturalLanguageSnippet = 'Sure, I can help you with that. What do you need assistance with?';201assert.strictEqual(looksLikeCode(naturalLanguageSnippet), false);202});203204test('looksLikeCode - detects natural language explanation as non-code', () => {205const naturalLanguageSnippet = 'To create a new React component, you can use the following code snippet:';206assert.strictEqual(looksLikeCode(naturalLanguageSnippet), false);207});208209test('looksLikeCode - detects natural language instruction as non-code', () => {210const naturalLanguageSnippet = 'First, install the necessary dependencies using npm or yarn.';211assert.strictEqual(looksLikeCode(naturalLanguageSnippet), false);212});213214test('looksLikeCode - detects natural language question as non-code', () => {215const naturalLanguageSnippet = 'Have you tried restarting your development server?';216assert.strictEqual(looksLikeCode(naturalLanguageSnippet), false);217});218219test('looksLikeCode - detects natural language suggestion as non-code', () => {220const naturalLanguageSnippet = 'I suggest checking the console for any error messages.';221assert.strictEqual(looksLikeCode(naturalLanguageSnippet), false);222});223224test('looksLikeCode - detects natural language response in Spanish as non-code', () => {225const spanishSnippet = 'Claro, puedo ayudarte con eso. ¿Qué necesitas?';226assert.strictEqual(looksLikeCode(spanishSnippet), false);227});228229test('looksLikeCode - detects natural language response in French as non-code', () => {230const frenchSnippet = 'Bien sûr, je peux vous aider avec cela. Que voulez-vous savoir?';231assert.strictEqual(looksLikeCode(frenchSnippet), false);232});233234test('looksLikeCode - detects natural language response in German as non-code', () => {235const germanSnippet = 'Natürlich kann ich Ihnen dabei helfen. Was brauchen Sie?';236assert.strictEqual(looksLikeCode(germanSnippet), false);237});238239test('looksLikeCode - detects natural language response in Chinese as non-code', () => {240const chineseSnippet = '当然,我可以帮你。你需要什么帮助?';241assert.strictEqual(looksLikeCode(chineseSnippet), false);242});243244test('looksLikeCode - detects natural language response in Japanese as non-code', () => {245const japaneseSnippet = 'もちろん、お手伝いできます。何が必要ですか?';246assert.strictEqual(looksLikeCode(japaneseSnippet), false);247});248249test('looksLikeCode - detects natural language response in Russian as non-code', () => {250const russianSnippet = 'Конечно, я могу вам помочь. Что вам нужно?';251assert.strictEqual(looksLikeCode(russianSnippet), false);252});253254});255256257