Navigation Menu

Skip to content

Commit

Permalink
bq: throw exception for missing group start "("
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Aug 6, 2012
1 parent bd3f1e3 commit ec2cebb
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
10 changes: 7 additions & 3 deletions lib/bq-translator.js
Expand Up @@ -55,8 +55,7 @@ BooleanQueryTranslator.prototype = {
},
translateGroup: function() {
if (this.query[this.offset] != "(") {
// TODO: report error
return "";
this.throwTranslateError("not started with <(>");
}

this.offset++;
Expand Down Expand Up @@ -261,7 +260,12 @@ BooleanQueryTranslator.prototype = {
return "";
},
translateExpressionValueStringKeyword: function(field, value) {
return field + " @ " + "\"" + value + "\"";
var operator = "@";
if (value[value.length - 1] == "*") {
operator = "@^";
value = value.substring(0, value.length - 1);
}
return field + " " + operator + " " + "\"" + value + "\"";
},
translateExpressionValuePhrase: function(field) {
if (!(this.query[this.offset] == "'" &&
Expand Down
26 changes: 26 additions & 0 deletions test/bq-translator.test.js
Expand Up @@ -49,6 +49,23 @@ function testGroup(label, group, expectedOffset, expectedScriptGrnExpr) {
});
}

function testGroupError(label, group, context, detail) {
test('error: group: ' + label + ': ' + '<' + group + '>', function() {
var translator = new BooleanQueryTranslator(group);
translator.defaultField = "field";
var actualError;
assert.throw(function() {
try {
translator.translateGroup();
} catch (error) {
actualError = error;
throw error;
}
});
assert.equal(actualError.message, "<" + context + ">" + ": " + detail);
});
}

function testExpression(label, expression,
expectedOffset, expectedScriptGrnExpr) {
test('expression: ' + label + ': ' +
Expand Down Expand Up @@ -105,6 +122,11 @@ suite('BoolanQueryTranslator', function() {
"(and (or f1:'k1' f2:'k2') f3:'k3')".length,
"((f1 @ \"k1\" || f2 @ \"k2\") && f3 @ \"k3\")");

testGroupError("missing open parentheis",
"and f1:'k1' f2:'k2')",
"|a|nd f1:'k1' f2:'k2')",
"not started with <(>");

testExpression("value only: stirng: and: space",
"'keyword1 keyword2' 'other keyword'",
"'keyword1 keyword2'".length,
Expand All @@ -117,6 +139,10 @@ suite('BoolanQueryTranslator', function() {
"'keyword1|keyword2' 'other keyword'",
"'keyword1|keyword2'".length,
"field @ \"keyword1\" || field @ \"keyword2\"");
testExpression("value only: stirng: prefix search",
"'keyword*' 'other keyword'",
"'keyword*'".length,
"field @^ \"keyword\"");
testExpression("value only: stirng: phrase",
"'\"keyword1 keyword2\"' 'other keyword'",
"'\"keyword1 keyword2\"'".length,
Expand Down

0 comments on commit ec2cebb

Please sign in to comment.