Path: blob/main/extensions/copilot/src/platform/parser/test/node/getTestableNode.ts.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 { outdent } from 'outdent';6import { afterAll, expect, suite, test } from 'vitest';7import { _dispose } from '../../node/parserWithCaching';8import { WASMLanguage } from '../../node/treeSitterLanguages';9import { srcWithAnnotatedTestableNode } from './getTestableNode.util';1011suite('getTestableNode - ts', () => {12afterAll(() => _dispose());1314function run(annotatedSrc: string) {15return srcWithAnnotatedTestableNode(16WASMLanguage.TypeScript,17annotatedSrc,18);19}2021test('function declaration', async () => {22const result = await run(23outdent`24function <<add>>(a: number, b: number): number {25return a + b;26}27`,28);29expect(result).toMatchInlineSnapshot(`30"<NODE(function_declaration)>function <IDENT>add</IDENT>(a: number, b: number): number {31return a + b;32}</NODE(function_declaration)>"33`);34});3536test('method', async () => {37const result = await run(38outdent`39class Foo {40<<method>>(a: number, b: number): number {41return a + b;42}43}44`,45);46expect(result).toMatchInlineSnapshot(`47"class Foo {48<NODE(method_definition)><IDENT>method</IDENT>(a: number, b: number): number {49return a + b;50}</NODE(method_definition)>51}"52`);53});5455test('public method', async () => {56const result = await run(57outdent`58class Foo {59<<method>>(a: number, b: number): number {60return a + b;61}62}63`,64);65expect(result).toMatchInlineSnapshot(`66"class Foo {67<NODE(method_definition)><IDENT>method</IDENT>(a: number, b: number): number {68return a + b;69}</NODE(method_definition)>70}"71`);72});7374test('several public methods', async () => {75const result = await run(76outdent`77class Foo {78method(a: number, b: number): number {79return a + b;80}8182method2(a: number, b: number): number {83return a + b;84}8586method3(a: number, b: number): number {87return a + b;88}8990<<method4>>(a: number, b: number): number {91return a + b;92}93}94`,95);96expect(result).toMatchInlineSnapshot(`97"class Foo {98method(a: number, b: number): number {99return a + b;100}101102method2(a: number, b: number): number {103return a + b;104}105106method3(a: number, b: number): number {107return a + b;108}109110<NODE(method_definition)><IDENT>method4</IDENT>(a: number, b: number): number {111return a + b;112}</NODE(method_definition)>113}"114`);115});116117test('does not capture private method', async () => {118const result = await run(119outdent`120class Foo {121private <<method>>(a: number, b: number): number {122return a + b;123}124}125`,126);127expect(result).toMatchInlineSnapshot(`"testable node NOT found"`);128});129130test('static method', async () => {131const result = await run(132outdent`133class Foo {134static <<method>>(a: number, b: number): number {135return a + b;136}137}138`,139);140expect(result).toMatchInlineSnapshot(`141"class Foo {142<NODE(method_definition)>static <IDENT>method</IDENT>(a: number, b: number): number {143return a + b;144}</NODE(method_definition)>145}"146`);147});148149test('private static method', async () => {150const result = await run(151outdent`152class Foo {153private static <<method>>(a: number, b: number): number {154return a + b;155}156}157`,158);159expect(result).toMatchInlineSnapshot(`"testable node NOT found"`);160});161162163test('public static method', async () => {164const result = await run(165outdent`166class Foo {167public static <<method>>(a: number, b: number): number {168return a + b;169}170}171`,172);173expect(result).toMatchInlineSnapshot(`174"class Foo {175<NODE(method_definition)>public static <IDENT>method</IDENT>(a: number, b: number): number {176return a + b;177}</NODE(method_definition)>178}"179`);180});181182test('class declaration', async () => {183const result = await run(184outdent`185export class <<>>Foo {186method(a: number, b: number): number {187return a + b;188}189}190`,191);192expect(result).toMatchInlineSnapshot(`193"export <NODE(class_declaration)>class <IDENT>Foo</IDENT> {194method(a: number, b: number): number {195return a + b;196}197}</NODE(class_declaration)>"198`);199});200201test('class declaration with prop and method', async () => {202const result = await run(203outdent`204export class <<>>Foo {205bar = 1;206207method(a: number, b: number): number {208return a + b;209}210}211`,212);213expect(result).toMatchInlineSnapshot(`214"export <NODE(class_declaration)>class <IDENT>Foo</IDENT> {215bar = 1;216217method(a: number, b: number): number {218return a + b;219}220}</NODE(class_declaration)>"221`);222});223224test('class declaration with prop and static method', async () => {225const result = await run(226outdent`227export class Foo {228bar = 1;229230static <<>>method(a: number, b: number): number {231return a + b;232}233}234`,235);236expect(result).toMatchInlineSnapshot(`237"export class Foo {238bar = 1;239240<NODE(method_definition)>static <IDENT>method</IDENT>(a: number, b: number): number {241return a + b;242}</NODE(method_definition)>243}"244`);245});246});247248249