add all link types .fixes #24

This commit is contained in:
Joao Moreno 2015-11-03 17:26:35 -08:00
parent d3d40f94f6
commit 7b045444bd
4 changed files with 51 additions and 26 deletions

View file

@ -7,7 +7,12 @@
<Tags>${ tags }</Tags>
<GalleryFlags>Public</GalleryFlags>
<Properties>
<% if (links.repository) { %><Property Id="Microsoft.VisualStudio.Services.Links.Source" Value="${ links.repository }" /><% } %>
<% if (links.repository) { %>
<Property Id="Microsoft.VisualStudio.Services.Links.Source" Value="${ links.repository }" />
<Property Id="Microsoft.VisualStudio.Services.Links.Getstarted" Value="${ links.repository }" />
<% } %>
<% if (links.bugs) { %><Property Id="Microsoft.VisualStudio.Services.Links.Support" Value="${ links.bugs }" /><% } %>
<% if (links.homepage) { %><Property Id="Microsoft.VisualStudio.Services.Links.Learn" Value="${ links.homepage }" /><% } %>
<% if (galleryBanner.color) { %><Property Id="Microsoft.VisualStudio.Services.Branding.Color" Value="${ galleryBanner.color }" /><% } %>
<% if (galleryBanner.theme) { %><Property Id="Microsoft.VisualStudio.Services.Branding.Theme" Value="${ galleryBanner.theme }" /><% } %>
</Properties>

View file

@ -30,7 +30,7 @@ export interface Manifest {
license?: string;
contributors?: string | Person[];
main?: string;
repository?: string | { type: string; url: string; };
repository?: string | { type?: string; url?: string; };
scripts?: { [name: string]: string; };
dependencies?: { [name: string]: string; };
devDependencies?: { [name: string]: string; };

View file

@ -70,6 +70,18 @@ export abstract class BaseProcessor implements IProcessor {
abstract onFile(file: IFile): Promise<IFile>;
}
function getUrl(url: string | { url?: string; }): string {
if (!url) {
return null;
}
if (typeof url === 'string') {
return <string> url;
}
return (<any> url).url;
}
class MainProcessor extends BaseProcessor {
constructor(manifest: Manifest) {
super(manifest);
@ -81,7 +93,11 @@ class MainProcessor extends BaseProcessor {
publisher: manifest.publisher,
description: manifest.description || '',
tags: (manifest.keywords || []).concat('vscode').join(','),
links: { repository: manifest.repository },
links: {
repository: getUrl(manifest.repository),
bugs: getUrl(manifest.bugs),
homepage: manifest.homepage
},
galleryBanner: manifest.galleryBanner || {}
});
}

View file

@ -177,29 +177,6 @@ describe('toVsixManifest', () => {
});
});
it('should add repository link property', () => {
const manifest = {
name: 'test',
publisher: 'mocha',
version: '0.0.1',
description: 'test extension',
engines: Object.create(null),
homepage: 'https://homepage/test',
repository: 'https://repository/test'
};
return toVsixManifest(manifest, [])
.then(xml => parseXml(xml))
.then(result => {
assert.ok(result.PackageManifest.Metadata[0].Properties);
assert.equal(result.PackageManifest.Metadata[0].Properties.length, 1);
assert.ok(result.PackageManifest.Metadata[0].Properties[0].Property);
assert.equal(result.PackageManifest.Metadata[0].Properties[0].Property.length, 1);
assert.equal(result.PackageManifest.Metadata[0].Properties[0].Property[0].$.Id, 'Microsoft.VisualStudio.Services.Links.Source');
assert.equal(result.PackageManifest.Metadata[0].Properties[0].Property[0].$.Value, 'https://repository/test');
});
});
it('should add an icon metadata tag', () => {
const manifest = {
name: 'test',
@ -293,6 +270,33 @@ describe('toVsixManifest', () => {
assert.ok(properties.some(p => p.Id === 'Microsoft.VisualStudio.Services.Branding.Theme' && p.Value === 'dark'));
});
});
it('should understand all link types', () => {
const manifest = {
name: 'test',
publisher: 'mocha',
version: '0.0.1',
engines: Object.create(null),
repository: {
type: "git",
url: "https://github.com/Microsoft/vscode-spell-check.git"
},
bugs: {
url: "https://github.com/Microsoft/vscode-spell-check/issues"
},
homepage: "https://github.com/Microsoft/vscode-spell-check",
};
return toVsixManifest(manifest, [])
.then(xml => parseXml(xml))
.then(result => {
const properties = result.PackageManifest.Metadata[0].Properties[0].Property.map(p => p.$);
assert.ok(properties.some(p => p.Id === 'Microsoft.VisualStudio.Services.Links.Source' && p.Value === 'https://github.com/Microsoft/vscode-spell-check.git'));
assert.ok(properties.some(p => p.Id === 'Microsoft.VisualStudio.Services.Links.Getstarted' && p.Value === 'https://github.com/Microsoft/vscode-spell-check.git'));
assert.ok(properties.some(p => p.Id === 'Microsoft.VisualStudio.Services.Links.Support' && p.Value === 'https://github.com/Microsoft/vscode-spell-check/issues'));
assert.ok(properties.some(p => p.Id === 'Microsoft.VisualStudio.Services.Links.Learn' && p.Value === 'https://github.com/Microsoft/vscode-spell-check'));
});
});
});
describe('toContentTypes', () => {