Skip to content

Commit

Permalink
Handle special output URI characters gracefully.
Browse files Browse the repository at this point in the history
Signed-off-by: Akos Kitta <kittaakos@typefox.io>
  • Loading branch information
Akos Kitta authored and kittaakos committed Jun 18, 2020
1 parent c0302aa commit dc5b9e1
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export class SampleOutputChannelWithSeverity
@inject(OutputChannelManager)
protected readonly outputChannelManager: OutputChannelManager;
public onStart(): void {
const channel = this.outputChannelManager.getChannel('my test channel');
const channel = this.outputChannelManager.getChannel('API Sample: my test channel');
channel.appendLine('hello info1'); // showed without color
channel.appendLine('hello info2', OutputChannelSeverity.Info);
channel.appendLine('hello error', OutputChannelSeverity.Error);
Expand Down
53 changes: 53 additions & 0 deletions packages/output/src/common/output-uri.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/********************************************************************************
* Copyright (C) 2020 TypeFox and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
********************************************************************************/

import { expect } from 'chai';
import { OutputUri } from './output-uri';
import { fail } from 'assert';

describe('output-uri', () => {

it('should fail when output channel name is an empty string', () => {
try {
OutputUri.create('');
fail('Expected failure.');
} catch (e) {
expect(e.message).to.be.equal("'name' must be defined.");
}
});

it('should fail when output channel name contains whitespace only', () => {
try {
OutputUri.create(' \t');
fail('Expected failure.');
} catch (e) {
expect(e.message).to.be.equal("'name' must contain at least one non-whitespace character.");
}
});

it('should handle whitespace', () => {
const uri = OutputUri.create('foo bar');
const name = OutputUri.channelName(uri);
expect(name).to.be.equal('foo bar');
});

it('should handle special characters (:) gracefully', () => {
const uri = OutputUri.create('foo: bar');
const name = OutputUri.channelName(uri);
expect(name).to.be.equal('foo: bar');
});

});
8 changes: 7 additions & 1 deletion packages/output/src/common/output-uri.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,13 @@ export namespace OutputUri {
}

export function create(name: string): URI {
return new URI(name).withScheme(SCHEME);
if (!name) {
throw new Error("'name' must be defined.");
}
if (!name.trim().length) {
throw new Error("'name' must contain at least one non-whitespace character.");
}
return new URI(encodeURIComponent(name)).withScheme(SCHEME);
}

export function channelName(uri: string | URI): string {
Expand Down
28 changes: 0 additions & 28 deletions packages/output/src/package.spec.ts

This file was deleted.

0 comments on commit dc5b9e1

Please sign in to comment.