From 1e095915e7513a43fc7fae14260ce580b9a9cf4e Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Fri, 16 Jul 2021 10:01:41 +0000 Subject: don't call accentDrop at all for empty input --- .../expressions/NormalizeExpression.java | 3 +++ .../expressions/NormalizeTestCase.java | 27 ++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) (limited to 'indexinglanguage') diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java index 78a7a858aba..fa68d45d110 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java @@ -43,6 +43,9 @@ public final class NormalizeExpression extends Expression { protected void doExecute(ExecutionContext context) { Transformer transformer = linguistics.getTransformer(); var orig = String.valueOf(context.getValue()); + if (orig.isEmpty()) { + return; // must be a no-op for all linguistics/language combinations + } var lang = context.resolveLanguage(linguistics); var transformed = transformer.accentDrop(orig, lang); try { diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeTestCase.java index 3ad1b129b4d..9f6ba4a1554 100644 --- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeTestCase.java +++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeTestCase.java @@ -60,18 +60,24 @@ public class NormalizeTestCase { } class MyMockTransformer implements Transformer { - boolean first = true; + public boolean first = true; @Override public String accentDrop(String input, Language language) { if (first) { first = false; - return input.replace(' ', '\u0008'); + return "\u0008"; } else { return input.replace(' ', '/'); } } } + boolean getFirst(Transformer t) { + assertTrue(t instanceof MyMockTransformer); + var mmt = (MyMockTransformer)t; + return mmt.first; + } + class MyMockLinguistics extends SimpleLinguistics { private Transformer transformer = new MyMockTransformer(); @Override @@ -86,9 +92,26 @@ public class NormalizeTestCase { ctx.setLanguage(Language.ENGLISH); ctx.setValue(new StringFieldValue("bad norm")); var linguistics = new MyMockLinguistics(); + assertTrue(getFirst(linguistics.getTransformer())); new NormalizeExpression(linguistics).execute(ctx); FieldValue val = ctx.getValue(); assertTrue(val instanceof StringFieldValue); assertEquals("bad/norm", ((StringFieldValue)val).getString()); + assertFalse(getFirst(linguistics.getTransformer())); } + + @Test + public void requireThatEmptyIsNop() { + ExecutionContext ctx = new ExecutionContext(new SimpleTestAdapter()); + ctx.setLanguage(Language.ENGLISH); + var orig = new StringFieldValue(""); + ctx.setValue(orig); + var linguistics = new MyMockLinguistics(); + assertTrue(getFirst(linguistics.getTransformer())); + new NormalizeExpression(linguistics).execute(ctx); + FieldValue val = ctx.getValue(); + assertTrue(val == orig); + assertTrue(getFirst(linguistics.getTransformer())); + } + } -- cgit v1.2.3