From 8174bc339a959b25bdc235a41cd169b7fcbb1eb0 Mon Sep 17 00:00:00 2001 From: George Lester <glester491@gmail.com> Date: Sun, 28 Dec 2014 02:29:06 -0800 Subject: [PATCH] Ensured whitespace stripping doesn't affected quoted characters --- parsing_test.go | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/parsing_test.go b/parsing_test.go index 18dc135..1e927c8 100644 --- a/parsing_test.go +++ b/parsing_test.go @@ -1,7 +1,9 @@ package govaluate import ( - "strings" + "bytes" + "unicode" + "unicode/utf8" "time" "testing" ) @@ -461,10 +463,11 @@ func combineWhitespaceExpressions(testCases []TokenParsingTest) []TokenParsingTe for i := 0; i < caseLength; i++ { currentCase = testCases[i]; + strippedCase = TokenParsingTest { Name: (currentCase.Name + " (without whitespace)"), - Input: strings.Replace(currentCase.Input, " ", "", -1), + Input: stripUnquotedWhitespace(currentCase.Input), Expected: currentCase.Expected, } @@ -474,6 +477,30 @@ func combineWhitespaceExpressions(testCases []TokenParsingTest) []TokenParsingTe return testCases; } +func stripUnquotedWhitespace(expression string) string { + + var expressionBuffer bytes.Buffer; + var character rune; + var quoted bool; + + for i := 0; i < len(expression); i++ { + + character, _ = utf8.DecodeRuneInString(expression[i:]); + + if(!quoted && unicode.IsSpace(character)) { + continue; + } + + if(character == '\'') { + quoted = !quoted; + } + + expressionBuffer.WriteString(string(character)); + } + + return expressionBuffer.String(); +} + func runTokenParsingTest(tokenParsingTests []TokenParsingTest, test *testing.T) { var expression *EvaluableExpression