more tests

This commit is contained in:
Joao Moreno 2015-10-13 17:25:02 +02:00
parent 5ba5b22df1
commit 91c2dbe8f2
3 changed files with 49 additions and 4 deletions

View file

@ -48,6 +48,7 @@
"gulp-filter": "^3.0.1",
"gulp-tsb": "^1.6.0",
"mocha": "^2.3.3",
"rimraf": "^2.4.3"
"rimraf": "^2.4.3",
"xml2js": "^0.4.12"
}
}

View file

@ -82,7 +82,7 @@ function prepublish(cwd: string, manifest: Manifest): Promise<Manifest> {
.catch(err => Promise.reject(err.message));
}
function toVsixManifest(manifest: Manifest): Promise<string> {
export function toVsixManifest(manifest: Manifest): Promise<string> {
return readFile(vsixManifestTemplatePath, 'utf8')
.then(vsixManifestTemplateStr => _.template(vsixManifestTemplateStr))
.then(vsixManifestTemplate => vsixManifestTemplate({
@ -91,7 +91,8 @@ function toVsixManifest(manifest: Manifest): Promise<string> {
version: manifest.version,
publisher: manifest.publisher,
description: manifest.description || '',
tags: (manifest.keywords || []).concat('vscode').join(';')
tags: (manifest.keywords || []).concat('vscode').join(';'),
assets: []
}));
}

View file

@ -1,9 +1,13 @@
/*global describe,it*/
import { readManifest, collect } from '../out/package';
import { readManifest, collect, toVsixManifest } from '../out/package';
import * as path from 'path';
import * as fs from 'fs';
import * as assert from 'assert';
import { parseString } from 'xml2js';
import * as _denodeify from 'denodeify';
const denodeify = _denodeify['default'];
const parseXml = denodeify(parseString);
const fixture = name => path.join(__dirname, 'fixtures', name);
@ -54,4 +58,43 @@ describe('collect', () => {
})
.catch(cb);
});
});
describe('toVsixManifest', () => {
it('should produce a good xml', () => {
const manifest = {
name: 'test',
publisher: 'mocha',
version: '0.0.1',
description: 'test extension'
};
return toVsixManifest(manifest)
.then(xml => parseXml(xml))
.then(result => {
assert.ok(result);
assert.ok(result.PackageManifest);
assert.ok(result.PackageManifest.$);
assert.equal(result.PackageManifest.$.Version, '2.0.0');
assert.equal(result.PackageManifest.$.xmlns, 'http://schemas.microsoft.com/developer/vsx-schema/2011');
assert.equal(result.PackageManifest.$['xmlns:d'], 'http://schemas.microsoft.com/developer/vsx-schema-design/2011');
assert.ok(result.PackageManifest.Metadata);
assert.equal(result.PackageManifest.Metadata.length, 1);
assert.equal(result.PackageManifest.Metadata[0].Description[0]._, 'test extension');
assert.equal(result.PackageManifest.Metadata[0].DisplayName[0], 'test');
assert.equal(result.PackageManifest.Metadata[0].Identity[0].$.Id, 'test');
assert.equal(result.PackageManifest.Metadata[0].Identity[0].$.Version, '0.0.1');
assert.equal(result.PackageManifest.Metadata[0].Identity[0].$.Publisher, 'mocha');
assert.deepEqual(result.PackageManifest.Metadata[0].Tags, ['vscode']);
assert.deepEqual(result.PackageManifest.Metadata[0].GalleryFlags, ['Public']);
assert.equal(result.PackageManifest.Installation.length, 1);
assert.equal(result.PackageManifest.Installation[0].InstallationTarget.length, 1);
assert.equal(result.PackageManifest.Installation[0].InstallationTarget[0].$.Id, 'Microsoft.VisualStudio.Code');
assert.deepEqual(result.PackageManifest.Dependencies, ['']);
assert.equal(result.PackageManifest.Assets.length, 1);
assert.equal(result.PackageManifest.Assets[0].Asset.length, 1);
assert.equal(result.PackageManifest.Assets[0].Asset[0].$.Type, 'Microsoft.VisualStudio.Code.Manifest');
assert.equal(result.PackageManifest.Assets[0].Asset[0].$.Path, 'extension/package.json');
});
});
});