Bug 1258899 - teach manifest processor about dir member. r=baku

This commit is contained in:
Marcos Caceres 2016-04-13 21:55:00 +02:00
Родитель c5e251b3b9
Коммит bd05cc6aa3
3 изменённых файлов: 79 добавлений и 0 удалений

Просмотреть файл

@ -32,6 +32,8 @@ const orientationTypes = new Set(['any', 'natural', 'landscape', 'portrait',
'portrait-primary', 'portrait-secondary', 'landscape-primary',
'landscape-secondary'
]);
const textDirections = new Set(['ltr', 'rtl', 'auto']);
Cu.import('resource://gre/modules/Console.jsm');
Cu.import("resource://gre/modules/Services.jsm");
// ValueExtractor is used by the various processors to get values
@ -50,6 +52,9 @@ this.ManifestProcessor = { // jshint ignore:line
get orientationTypes() {
return orientationTypes;
},
get textDirections() {
return textDirections;
},
// process() method processes JSON text into a clean manifest
// that conforms with the W3C specification. Takes an object
// expecting the following dictionary items:
@ -79,6 +84,7 @@ this.ManifestProcessor = { // jshint ignore:line
const extractor = new ValueExtractor(console, domBundle);
const imgObjProcessor = new ImageObjectProcessor(console, extractor);
const processedManifest = {
'dir': processDirMember.call(this),
'lang': processLangMember(),
'start_url': processStartURLMember(),
'display': processDisplayMember.call(this),
@ -94,6 +100,21 @@ this.ManifestProcessor = { // jshint ignore:line
processedManifest.scope = processScopeMember();
return processedManifest;
function processDirMember() {
const spec = {
objectName: 'manifest',
object: rawManifest,
property: 'dir',
expectedType: 'string',
trim: true,
};
const value = extractor.extractValue(spec);
if (this.textDirections.has(value)) {
return value;
}
return 'auto';
}
function processNameMember() {
const spec = {
objectName: 'manifest',

Просмотреть файл

@ -9,6 +9,7 @@ support-files =
[test_ImageObjectProcessor_src.html]
[test_ImageObjectProcessor_type.html]
[test_ManifestProcessor_background_color.html]
[test_ManifestProcessor_dir.html]
[test_ManifestProcessor_display.html]
[test_ManifestProcessor_icons.html]
[test_ManifestProcessor_JSON.html]

Просмотреть файл

@ -0,0 +1,57 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1258899
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 1258899</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script src="common.js"></script>
<script>
/**
* dir member
* https://w3c.github.io/manifest/#dir-member
**/
'use strict';
//Type checks
typeTests.forEach((type) => {
var expected = `Expect non - string dir to default to "auto".`;
data.jsonText = JSON.stringify({
dir: type
});
var result = processor.process(data);
is(result.dir, 'auto', expected);
});
/*Test valid values*/
var validDirs = ['ltr', 'rtl', 'auto']
validDirs.forEach((dir) => {
var expected = `Expect dir value to be ${dir}.`;
data.jsonText = JSON.stringify({dir});
var result = processor.process(data);
is(result.dir, dir, expected);
});
//trim tests
validDirs.forEach((dir) => {
var expected = `Expect trimmed dir to be returned.`;
var expandeddir = seperators + lineTerminators + dir + lineTerminators + seperators;
data.jsonText = JSON.stringify({
dir: expandeddir
});
var result = processor.process(data);
is(result.dir, dir, expected);
});
//Unknown/Invalid directions
var invalidDirs = ['LTR', 'RtL', `fooo${whiteSpace}rtl`, '', 'bar baz, some value', 'ltr rtl auto', 'AuTo'];
invalidDirs.forEach((dir) => {
var expected = `Expect default dir "auto" to be returned: '${dir}'`;
data.jsonText = JSON.stringify({dir});
var result = processor.process(data);
is(result.dir, 'auto', expected);
});
</script>
</head>