Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use config data to build profile menu #4

Merged
merged 13 commits into from
Feb 24, 2020
2 changes: 1 addition & 1 deletion dist/lib/x-terminal.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/lib/x-terminal.js.map

Large diffs are not rendered by default.

188 changes: 94 additions & 94 deletions spec/config-spec.js

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions spec/custom-runner.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,14 @@ prunk.suppress(/\.(?:sa|s?c)ss$/)

module.exports = createRunner({
reporter: new SpecReporter(),
}, () => {
const warn = console.warn.bind(console)
beforeEach(() => {
spyOn(console, 'warn').and.callFake((...args) => {
if (args[0].includes('not attached to the DOM')) {
return
}
warn(...args)
})
})
})
82 changes: 71 additions & 11 deletions spec/element-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ temp.track()
describe('XTerminalElement', () => {
const savedPlatform = process.platform
this.element = null
this.tmpdirObj = null
this.tmpdir = null

const createNewElement = async (uri = 'x-terminal://somesessionid/') => {
const terminalsSet = new Set()
Expand Down Expand Up @@ -100,7 +100,7 @@ describe('XTerminalElement', () => {
})

it('getShellCommand()', () => {
expect(this.element.getShellCommand()).toBe(configDefaults.getDefaultShellCommand())
expect(this.element.getShellCommand()).toBe(configDefaults.command)
})

it('getShellCommand() command set in uri', async () => {
Expand Down Expand Up @@ -129,7 +129,7 @@ describe('XTerminalElement', () => {
})

it('getTermType()', () => {
expect(this.element.getTermType()).toBe(configDefaults.getDefaultTermType())
expect(this.element.getTermType()).toBe(configDefaults.termType)
})

it('getTermType() name set in uri', async () => {
Expand Down Expand Up @@ -167,7 +167,7 @@ describe('XTerminalElement', () => {

it('getCwd()', async () => {
const cwd = await this.element.getCwd()
expect(cwd).toBe(configDefaults.getDefaultCwd())
expect(cwd).toBe(configDefaults.cwd)
})

it('getCwd() cwd set in uri', async () => {
Expand All @@ -179,6 +179,16 @@ describe('XTerminalElement', () => {
expect(cwd).toBe(expected)
})

it('getCwd() ignore cwd in uri if projectCwd is set', async () => {
const expected = await temp.mkdir('projectCwd')
spyOn(atom.project, 'getPaths').and.returnValue([expected])
const params = new URLSearchParams({ projectCwd: true, cwd: this.tmpdir })
const url = new URL('x-terminal://?' + params.toString())
const element = await createNewElement(url.href)
const cwd = await element.getCwd()
expect(cwd).toBe(expected)
})

it('getCwd() model getPath() returns valid path', async () => {
const previousActiveItem = jasmine.createSpyObj(
'previousActiveItem',
Expand All @@ -204,7 +214,7 @@ describe('XTerminalElement', () => {
)
const element = await createNewElement()
const cwd = await element.getCwd()
expect(cwd).toBe(configDefaults.getDefaultCwd())
expect(cwd).toBe(configDefaults.cwd)
})

it('getCwd() non-existent cwd set in uri', async () => {
Expand All @@ -213,14 +223,14 @@ describe('XTerminalElement', () => {
const url = new URL('x-terminal://?' + params.toString())
await createNewElement(url.href)
const cwd = await this.element.getCwd()
expect(cwd).toBe(configDefaults.getDefaultCwd())
expect(cwd).toBe(configDefaults.cwd)
})

it('getCwd() non-existent project path added', async () => {
spyOn(atom.project, 'getPaths').and.returnValue([path.join(this.tmpdir, 'non-existent-dir')])
const element = await createNewElement()
const cwd = await element.getCwd()
expect(cwd).toBe(configDefaults.getDefaultCwd())
expect(cwd).toBe(configDefaults.cwd)
})

it('getEnv()', () => {
Expand Down Expand Up @@ -1054,6 +1064,56 @@ describe('XTerminalElement', () => {
expect(this.element.ptyProcess).toBeTruthy()
})

describe('loaded addons', () => {
const { Terminal } = require('xterm')
const { WebLinksAddon } = require('xterm-addon-web-links')
const { WebglAddon } = require('xterm-addon-webgl')

beforeEach(() => {
spyOn(Terminal.prototype, 'loadAddon').and.callThrough()
})

it('createTerminal() enable web-link addon', async () => {
const params = new URLSearchParams({ webLinks: true })
const url = new URL('x-terminal://?' + params.toString())
await createNewElement(url.href)
const wasAdded = Terminal.prototype.loadAddon.calls.all().some(call => {
return call.args[0] instanceof WebLinksAddon
})
expect(wasAdded).toBe(true)
})

it('createTerminal() disable web-link addon', async () => {
const params = new URLSearchParams({ webLinks: false })
const url = new URL('x-terminal://?' + params.toString())
await createNewElement(url.href)
const wasAdded = Terminal.prototype.loadAddon.calls.all().some(call => {
return call.args[0] instanceof WebLinksAddon
})
expect(wasAdded).toBe(false)
})

it('createTerminal() enable webgl addon', async () => {
const params = new URLSearchParams({ webgl: true })
const url = new URL('x-terminal://?' + params.toString())
await createNewElement(url.href)
const wasAdded = Terminal.prototype.loadAddon.calls.all().some(call => {
return call.args[0] instanceof WebglAddon
})
expect(wasAdded).toBe(true)
})

it('createTerminal() disable webgl addon', async () => {
const params = new URLSearchParams({ webgl: false })
const url = new URL('x-terminal://?' + params.toString())
await createNewElement(url.href)
const wasAdded = Terminal.prototype.loadAddon.calls.all().some(call => {
return call.args[0] instanceof WebglAddon
})
expect(wasAdded).toBe(false)
})
})

it('restartPtyProcess() check new pty process created', async () => {
const oldPtyProcess = this.element.ptyProcess
const newPtyProcess = jasmine.createSpyObj('ptyProcess',
Expand Down Expand Up @@ -1820,23 +1880,23 @@ describe('XTerminalElement', () => {
})

it('use ctrl+wheelScrollUp font already at maximum', () => {
this.element.model.profile.fontSize = configDefaults.getMaximumFontSize()
this.element.model.profile.fontSize = configDefaults.maximumFontSize
const wheelEvent = new WheelEvent('wheel', {
deltaY: -150,
ctrlKey: true,
})
this.element.terminalDiv.dispatchEvent(wheelEvent)
expect(this.element.model.profile.fontSize).toBe(configDefaults.getMaximumFontSize())
expect(this.element.model.profile.fontSize).toBe(configDefaults.maximumFontSize)
})

it('use ctrl+wheelScrollDown font already at minimum', () => {
this.element.model.profile.fontSize = configDefaults.getMinimumFontSize()
this.element.model.profile.fontSize = configDefaults.minimumFontSize
const wheelEvent = new WheelEvent('wheel', {
deltaY: 150,
ctrlKey: true,
})
this.element.terminalDiv.dispatchEvent(wheelEvent)
expect(this.element.model.profile.fontSize).toBe(configDefaults.getMinimumFontSize())
expect(this.element.model.profile.fontSize).toBe(configDefaults.minimumFontSize)
})

it('getXtermOptions() default options', () => {
Expand Down
23 changes: 19 additions & 4 deletions spec/model-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ describe('XTerminalModel', () => {
terminals_set: new Set(),
})
await model.initializedPromise
expect(model.getPath()).toBe(configDefaults.getDefaultCwd())
expect(model.getPath()).toBe(configDefaults.cwd)
})

it('constructor with valid cwd passed in uri', async () => {
Expand All @@ -83,6 +83,21 @@ describe('XTerminalModel', () => {
expect(model.getPath()).toBe(this.tmpdir)
})

it('use projectCwd with valid cwd passed in uri', async () => {
const expected = await temp.mkdir('projectCwd')
spyOn(atom.project, 'getPaths').and.returnValue([expected])
spyOn(atom.workspace, 'getActivePaneItem').and.returnValue({})
const url = XTerminalProfilesSingleton.instance.generateNewUrlFromProfileData({})
url.searchParams.set('projectCwd', true)
url.searchParams.set('cwd', this.tmpdir)
const model = new XTerminalModel({
uri: url.href,
terminals_set: new Set(),
})
await model.initializedPromise
expect(model.getPath()).toBe(expected)
})

it('constructor with invalid cwd passed in uri', async () => {
spyOn(atom.workspace, 'getActivePaneItem').and.returnValue({})
const url = XTerminalProfilesSingleton.instance.generateNewUrlFromProfileData({})
Expand All @@ -92,7 +107,7 @@ describe('XTerminalModel', () => {
terminals_set: new Set(),
})
await model.initializedPromise
expect(model.getPath()).toBe(configDefaults.getDefaultCwd())
expect(model.getPath()).toBe(configDefaults.cwd)
})

it('constructor with previous active item that has getPath() method', async () => {
Expand Down Expand Up @@ -130,7 +145,7 @@ describe('XTerminalModel', () => {
terminals_set: new Set(),
})
await model.initializedPromise
expect(model.getPath()).toBe(configDefaults.getDefaultCwd())
expect(model.getPath()).toBe(configDefaults.cwd)
})

it('constructor with previous active item which exists in project path', async () => {
Expand Down Expand Up @@ -277,7 +292,7 @@ describe('XTerminalModel', () => {
})

it('getPath()', () => {
expect(this.model.getPath()).toBe(configDefaults.getDefaultCwd())
expect(this.model.getPath()).toBe(configDefaults.cwd)
})

it('getPath() cwd set', () => {
Expand Down
47 changes: 0 additions & 47 deletions spec/profile-menu-element-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,45 +82,6 @@ describe('XTerminalProfileMenuElement', () => {
expect(this.element.getModelProfile()).toBe(mock)
})

it('parseJson() array type', () => {
const expected = ['foo']
const actual = this.element.parseJson(
'["foo"]',
null,
Array,
)
expect(actual).toEqual(expected)
})

it('parseJson() object type', () => {
const expected = { foo: 'bar' }
const actual = this.element.parseJson(
'{"foo": "bar"}',
null,
Object,
)
expect(actual).toEqual(expected)
})

it('parseJson() default value', () => {
const expected = ['foo']
const actual = this.element.parseJson(
'null',
expected,
Array,
)
expect(actual).toEqual(expected)
})

it('parseJson() syntax error', () => {
const actual = this.element.parseJson(
'[[',
'foo',
Array,
)
expect(actual).toBe('foo')
})

it('getMenuElements()', () => {
expect(this.element.getMenuElements()).toBeTruthy()
})
Expand Down Expand Up @@ -324,14 +285,6 @@ describe('XTerminalProfileMenuElement', () => {
this.element.promptForNewProfileName('foo', 'bar')
})

it('convertNullToEmptyString() value is null', () => {
expect(this.element.convertNullToEmptyString(null)).toBe('')
})

it('convertNullToEmptyString() value is not null', () => {
expect(this.element.convertNullToEmptyString('foo')).toBe('"foo"')
})

it('setNewMenuSettings()', () => {
this.element.setNewMenuSettings(this.element.profilesSingleton.getBaseProfile())
})
Expand Down
Loading