wemf
Version:
Format manifest.json to use on WebExtension from Chrome Extension
156 lines (137 loc) • 6.17 kB
JavaScript
'use strict'
const test = require('ava')
const proxyquire = require('proxyquire')
const Formatter = require('../../libs/formatter')
test('isValid', t => {
const formatter = new Formatter('../fixtures/check_must_key.json')
t.ok(formatter.isValid === false)
})
test('checkUnsupportedKeyOrProps', t => {
const formatter = new Formatter('../fixtures/manifest.json')
t.ok(formatter.checkUnsupportedKeyOrProps() === false)
})
test('checkRequiredKey', t => {
const formatter = new Formatter('../fixtures/check_must_key.json')
t.ok(formatter.checkRequiredKey() === false)
t.ok(formatter.shouldContainKeys.indexOf('manifest_version') > -1 === true)
t.ok(formatter.shouldContainKeys.indexOf('name') > -1 === true)
t.ok(formatter.shouldContainKeys.indexOf('version') > -1 === true)
const formatter2 = new Formatter('../fixtures/check_must_key_pass.json')
t.ok(formatter2.checkRequiredKey() === true)
t.is(formatter2.shouldContainKeys.length, 0)
})
test('fillMustKey `version`', t => {
const formatter = new Formatter('../fixtures/check_must_key.json')
formatter.fillMustKey('version', '0.0.1')
t.is(formatter.shouldContainKeys.indexOf('version') > -1, false)
t.is(formatter.json.version, '0.0.1')
const formatter2 = new Formatter('../fixtures/check_must_key.json')
formatter2.fillMustKey({version: '0.0.1'})
t.is(formatter2.shouldContainKeys.indexOf('version') > -1, false)
t.is(formatter2.json.version, '0.0.1')
})
test('fillMustKey `manifest_version`', t => {
const formatter = new Formatter('../fixtures/check_must_key.json')
formatter.fillMustKey('manifest_version', '2')
t.is(formatter.shouldContainKeys.indexOf('manifest_version') > -1, false)
t.is(formatter.json.manifest_version, '2')
const formatter2 = new Formatter('../fixtures/check_must_key.json')
formatter2.fillMustKey({manifest_version: '2'})
t.is(formatter2.shouldContainKeys.indexOf('manifest_version') > -1, false)
t.is(formatter2.json.manifest_version, '2')
const formatter3 = new Formatter('../fixtures/check_must_key.json')
formatter3.fillMustKey('manifest_version')
t.is(formatter3.shouldContainKeys.indexOf('manifest_version') > -1, false)
t.is(formatter3.json.manifest_version, '2')
})
test('fillMustKey `name`', t => {
const formatter = new Formatter('../fixtures/check_must_key.json')
formatter.fillMustKey('name', 'test')
t.is(formatter.shouldContainKeys.indexOf('name') > -1, false)
t.is(formatter.json.name, 'test')
const formatter2 = new Formatter('../fixtures/check_must_key.json')
formatter2.fillMustKey({name: 'test'})
t.is(formatter2.shouldContainKeys.indexOf('name') > -1, false)
t.is(formatter2.json.name, 'test')
})
test('fillMustKeys', t => {
const formatter = new Formatter('../fixtures/check_must_key.json')
formatter.fillMustKey('name', 'test')
formatter.fillMustKey('manifest_version')
formatter.fillMustKey('version', '0.0.1')
t.is(formatter.shouldContainKeys.length, 0)
t.is(formatter.json.name, 'test')
t.is(formatter.isValid, true)
})
test('checkUnsupportedProps', t => {
const formatter = new Formatter('../fixtures/check_must_key_pass.json')
t.is(formatter.checkUnsupportedProps(), true)
const formatter2 = new Formatter('../fixtures/manifest.json')
t.is(formatter2.checkUnsupportedProps(), false)
})
test('deleteUnsupportedProps', t => {
const formatter = new Formatter('../fixtures/manifest.json')
t.is(formatter.checkUnsupportedProps(), false)
formatter.deleteUnsupportedProps()
t.ok(formatter.checkUnsupportedProps())
})
test('deleteUnsupportedKey', t => {
const formatter = new Formatter('../fixtures/unsupported_key.json')
formatter.deleteUnsupportedKey()
t.ok(formatter.isValid)
})
test('Merge applications column from package.json', t => {
const fsStub = {readFileSync: (path) => {
if (path.match(/package\.json/)) {
return JSON.stringify({
webextension: {
applications: {
gecko: {
id: 'hoge@example.com'
}
}
}
})
} else {
return require('fs').readFileSync(path)
}
}}
const Formatter = proxyquire('../../libs/formatter', {fs: fsStub})
const formatter = new Formatter('../fixtures/check_must_key.json')
t.is(formatter.json.applications.gecko.id, 'hoge@example.com')
t.is(formatter.checkApplicationsKeyFormat(), true)
const Formatter2 = proxyquire('../../libs/formatter', {fs: fsStub})
const formatter2 = new Formatter('../fixtures/check_must_key_pass.json')
t.is(formatter2.json.applications.gecko.id, 'sample@example.com')
t.is(formatter2.checkApplicationsKeyFormat(), true)
})
test('General Check', t => {
const formatter = new Formatter('../fixtures/manifest.json')
t.is(formatter.isValid, false)
formatter.fillMustKey('applications', 'sample-extension@example.com')
formatter.fillMustKey('name', 'test')
formatter.fillMustKey('manifest_version')
formatter.fillMustKey('version', '0.0.1')
t.is(formatter.isValid, false)
formatter.deleteUnsupportedProps()
t.is(formatter.isValid, false)
formatter.deleteUnsupportedKey()
t.ok(formatter.isValid)
})
test('checkValidHostPattern', t => {
// Patterns from https://developer.chrome.com/extensions/match_patterns
const formatter = new Formatter('../fixtures/manifest.json')
t.is(formatter.checkValidHostPattern('http:/bar'), false)
t.is(formatter.checkValidHostPattern('foo://*'), false)
t.is(formatter.checkValidHostPattern('http://*/*'), true)
t.is(formatter.checkValidHostPattern('http://*/foo*'), true)
t.is(formatter.checkValidHostPattern('https://*.google.com/foo*bar'), true)
t.is(formatter.checkValidHostPattern('http://example.org/foo/bar.html'), true)
t.is(formatter.checkValidHostPattern('file:///foo*'), true)
t.is(formatter.checkValidHostPattern('http://127.0.0.1/*'), true)
t.is(formatter.checkValidHostPattern('*://mail.google.com/*'), true)
t.is(formatter.checkValidHostPattern('<all_urls>'), true)
t.is(formatter.checkValidHostPattern('http://www.google.com'), false)
t.is(formatter.checkValidHostPattern('http://*foo/bar'), false)
t.is(formatter.checkValidHostPattern('http://foo.*.bar/baz'), false)
})