| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- const assert = require('node:assert/strict')
- const { describe, test } = require('node:test')
- const getArgumentsForPosition = require('./get-args.js')
- describe('getArgumentsForPosition', () => {
- describe('editor-specific argument formats', () => {
- for (const editor of [
- 'atom',
- 'Atom',
- 'Atom Beta',
- 'subl',
- 'sublime',
- 'sublime_text',
- 'wstorm',
- 'charm',
- 'zed',
- ]) {
- test(`${editor} uses "file:line:column"`, () => {
- assert.deepEqual(getArgumentsForPosition(editor, 'file', 10, 5), ['file:10:5'])
- })
- }
- test('notepad++ uses -n/-c flags', () => {
- assert.deepEqual(getArgumentsForPosition('notepad++', 'file', 10, 5), ['-n10', '-c5', 'file'])
- })
- for (const editor of ['vim', 'mvim']) {
- test(`${editor} uses +call cursor()`, () => {
- assert.deepEqual(getArgumentsForPosition(editor, 'file', 10, 5), [
- '+call cursor(10, 5)',
- 'file',
- ])
- })
- }
- for (const editor of ['joe', 'gvim']) {
- test(`${editor} uses +line`, () => {
- assert.deepEqual(getArgumentsForPosition(editor, 'file', 10, 5), ['+10', 'file'])
- })
- }
- for (const editor of ['emacs', 'emacsclient']) {
- test(`${editor} uses +line:column`, () => {
- assert.deepEqual(getArgumentsForPosition(editor, 'file', 10, 5), ['+10:5', 'file'])
- })
- }
- for (const editor of ['rmate', 'mate', 'mine']) {
- test(`${editor} uses --line`, () => {
- assert.deepEqual(getArgumentsForPosition(editor, 'file', 10, 5), ['--line', 10, 'file'])
- })
- }
- for (const editor of [
- 'code',
- 'Code',
- 'code-insiders',
- 'Code - Insiders',
- 'codium',
- 'trae',
- 'antigravity',
- 'cursor',
- 'vscodium',
- 'VSCodium',
- ]) {
- test(`${editor} uses -r -g "file:line:column"`, () => {
- assert.deepEqual(getArgumentsForPosition(editor, 'file', 10, 5), ['-r', '-g', 'file:10:5'])
- })
- }
- for (const editor of ['idea', 'idea64', 'webstorm', 'pycharm', 'clion', 'rider']) {
- test(`${editor} uses --line/--column`, () => {
- assert.deepEqual(getArgumentsForPosition(editor, 'file', 10, 5), [
- '--line',
- 10,
- '--column',
- 5,
- 'file',
- ])
- })
- }
- })
- test('defaults columnNumber to 1 when omitted', () => {
- assert.deepEqual(getArgumentsForPosition('code', 'file', 10), ['-r', '-g', 'file:10:1'])
- })
- describe('editor resolution via path.basename and extension stripping', () => {
- test('resolves a full POSIX path', () => {
- assert.deepEqual(getArgumentsForPosition('/usr/local/bin/code', 'file', 10, 5), [
- '-r',
- '-g',
- 'file:10:5',
- ])
- })
- if (process.platform === 'win32') {
- test('resolves a full Windows path with .exe', () => {
- assert.deepEqual(getArgumentsForPosition('C:\\path\\Code.exe', 'file', 10, 5), [
- '-r',
- '-g',
- 'file:10:5',
- ])
- })
- test('resolves notepad++ from a full path with .exe', () => {
- assert.deepEqual(getArgumentsForPosition('C:\\tools\\notepad++.exe', 'file', 10, 5), [
- '-n10',
- '-c5',
- 'file',
- ])
- })
- }
- test('strips .cmd extension case-insensitively', () => {
- assert.deepEqual(getArgumentsForPosition('code.CMD', 'file', 10, 5), [
- '-r',
- '-g',
- 'file:10:5',
- ])
- })
- })
- })
|