Path: blob/main/extensions/copilot/src/platform/parser/test/node/getTestableNodes.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 { annotTestableNodes } from './getTestableNodes.util';1011suite('getTestableNodes - ts', () => {12afterAll(() => _dispose());1314function run(annotatedSrc: string) {15return annotTestableNodes(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 <IDENT>add</IDENT>(a: number, b: number): number {31return a + b;32}</NODE>"33`);34});3536test('method', async () => {37const result = await run(38outdent`39class Foo {40method(a: number, b: number): number {41return a + b;42}43}44`,45);46expect(result).toMatchInlineSnapshot(`47"<NODE>class <IDENT>Foo</IDENT> {48<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {49return a + b;50}</NODE-1>51}</NODE>"52`);53});5455test('public method', async () => {56const result = await run(57outdent`58class Foo {59method(a: number, b: number): number {60return a + b;61}62}63`,64);65expect(result).toMatchInlineSnapshot(`66"<NODE>class <IDENT>Foo</IDENT> {67<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {68return a + b;69}</NODE-1>70}</NODE>"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}8990method4(a: number, b: number): number {91return a + b;92}93}94`,95);96expect(result).toMatchInlineSnapshot(`97"<NODE>class <IDENT>Foo</IDENT> {98<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {99return a + b;100}</NODE-1>101102<NODE-2><IDENT-2>method2</IDENT-2>(a: number, b: number): number {103return a + b;104}</NODE-2>105106<NODE-3><IDENT-3>method3</IDENT-3>(a: number, b: number): number {107return a + b;108}</NODE-3>109110<NODE-4><IDENT-4>method4</IDENT-4>(a: number, b: number): number {111return a + b;112}</NODE-4>113}</NODE>"114`);115});116117test('captures mix', async () => {118const result = await run(119outdent`120class Foo {121methodPub() {122}123124private method(a: number, b: number): number {125return a + b;126}127}128`,129);130expect(result).toMatchInlineSnapshot(`131"<NODE>class <IDENT>Foo</IDENT> {132<NODE-1><IDENT-1>methodPub</IDENT-1>() {133}</NODE-1>134135private method(a: number, b: number): number {136return a + b;137}138}</NODE>"139`);140});141142test('does NOT capture private method', async () => {143const result = await run(144outdent`145class Foo {146private method(a: number, b: number): number {147return a + b;148}149}150`,151);152expect(result).toMatchInlineSnapshot(`153"class Foo {154private method(a: number, b: number): number {155return a + b;156}157}"158`);159});160161test('static method', async () => {162const result = await run(163outdent`164class Foo {165static method(a: number, b: number): number {166return a + b;167}168}169`,170);171expect(result).toMatchInlineSnapshot(`172"<NODE>class <IDENT>Foo</IDENT> {173<NODE-1>static <IDENT-1>method</IDENT-1>(a: number, b: number): number {174return a + b;175}</NODE-1>176}</NODE>"177`);178});179180test('private static method', async () => {181const result = await run(182outdent`183class Foo {184private static method(a: number, b: number): number {185return a + b;186}187}188`,189);190expect(result).toMatchInlineSnapshot(`191"class Foo {192private static method(a: number, b: number): number {193return a + b;194}195}"196`);197});198199200test('public static method', async () => {201const result = await run(202outdent`203class Foo {204public static method(a: number, b: number): number {205return a + b;206}207}208`,209);210expect(result).toMatchInlineSnapshot(`211"<NODE>class <IDENT>Foo</IDENT> {212<NODE-1>public static <IDENT-1>method</IDENT-1>(a: number, b: number): number {213return a + b;214}</NODE-1>215}</NODE>"216`);217});218219test('class declaration', async () => {220const result = await run(221outdent`222export class Foo {223method(a: number, b: number): number {224return a + b;225}226}227`,228);229expect(result).toMatchInlineSnapshot(`230"export <NODE>class <IDENT>Foo</IDENT> {231<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {232return a + b;233}</NODE-1>234}</NODE>"235`);236});237238test('class declaration with prop and method', async () => {239const result = await run(240outdent`241export class Foo {242bar = 1;243244method(a: number, b: number): number {245return a + b;246}247}248`,249);250expect(result).toMatchInlineSnapshot(`251"export <NODE>class <IDENT>Foo</IDENT> {252bar = 1;253254<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {255return a + b;256}</NODE-1>257}</NODE>"258`);259});260261test('class declaration with prop and static method', async () => {262const result = await run(263outdent`264export class Foo {265bar = 1;266267static method(a: number, b: number): number {268return a + b;269}270}271`,272);273expect(result).toMatchInlineSnapshot(`274"export <NODE>class <IDENT>Foo</IDENT> {275bar = 1;276277<NODE-1>static <IDENT-1>method</IDENT-1>(a: number, b: number): number {278return a + b;279}</NODE-1>280}</NODE>"281`);282});283});284285286