make sure the _expression reader can deal with combined propertyname and literals
This commit is contained in:
@@ -28,28 +28,34 @@ ol.parser.ogc.Filter_v1 = function() {
|
|||||||
this.readers = {
|
this.readers = {
|
||||||
'http://www.opengis.net/ogc': {
|
'http://www.opengis.net/ogc': {
|
||||||
_expression: function(node) {
|
_expression: function(node) {
|
||||||
var obj, value = '';
|
var obj, source = '';
|
||||||
for (var child = node.firstChild; child; child = child.nextSibling) {
|
for (var child = node.firstChild; child; child = child.nextSibling) {
|
||||||
switch (child.nodeType) {
|
switch (child.nodeType) {
|
||||||
case 1:
|
case 1:
|
||||||
obj = this.readNode(child);
|
obj = this.readNode(child);
|
||||||
if (obj.property) {
|
if (obj.property) {
|
||||||
value += obj.property.getName();
|
var name = obj.property.getName();
|
||||||
|
source += (source !== '') ? '+' + name : name;
|
||||||
} else if (goog.isDef(obj.value)) {
|
} else if (goog.isDef(obj.value)) {
|
||||||
if (obj.value instanceof ol.expr.Literal) {
|
return obj.value;
|
||||||
value += obj.value.getValue();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: // text node
|
case 3: // text node
|
||||||
case 4: // cdata section
|
case 4: // cdata section
|
||||||
value += child.nodeValue;
|
if (source !== '') {
|
||||||
|
source += '+';
|
||||||
|
}
|
||||||
|
if (isNaN(goog.string.toNumber(child.nodeValue))) {
|
||||||
|
source += goog.string.quote(goog.string.trim(child.nodeValue));
|
||||||
|
} else {
|
||||||
|
source += goog.string.trim(child.nodeValue);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ol.expr.parse(goog.string.trim(value));
|
return ol.expr.parse(source);
|
||||||
},
|
},
|
||||||
'Filter': function(node, obj) {
|
'Filter': function(node, obj) {
|
||||||
var container = {
|
var container = {
|
||||||
|
|||||||
@@ -235,6 +235,24 @@ describe('ol.parser.ogc.Filter_v1_0_0', function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('_expression reader works as expected', function() {
|
||||||
|
it('_expression reader handles combined propertyname and literal',
|
||||||
|
function() {
|
||||||
|
var xml = '<ogc:UpperBoundary xmlns:ogc="' +
|
||||||
|
'http://www.opengis.net/ogc">10</ogc:UpperBoundary>';
|
||||||
|
var reader = parser.readers['http://www.opengis.net/ogc'][
|
||||||
|
'_expression'];
|
||||||
|
var expr = reader.call(parser, goog.dom.xml.loadXml(
|
||||||
|
xml).documentElement);
|
||||||
|
expect(expr instanceof ol.expr.Literal).to.be.ok();
|
||||||
|
expect(expr.getValue()).to.equal(10);
|
||||||
|
xml = '<ogc:UpperBoundary xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||||
|
'foo<ogc:PropertyName>x</ogc:PropertyName>bar</ogc:UpperBoundary>';
|
||||||
|
expr = reader.call(parser, goog.dom.xml.loadXml(xml).documentElement);
|
||||||
|
expect(expr.evaluate({x: 4})).to.eql('foo4bar');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
goog.require('goog.dom.xml');
|
goog.require('goog.dom.xml');
|
||||||
|
|||||||
Reference in New Issue
Block a user