Search in sources :

Example 1 with Token

use of org.apache.metron.stellar.dsl.Token in project metron by apache.

the class StellarCompilerTest method exitIntLiteralShouldProperlyParseStringsAsIntegers.

@Test
public void exitIntLiteralShouldProperlyParseStringsAsIntegers() throws Exception {
    StellarParser.IntLiteralContext ctx = mock(StellarParser.IntLiteralContext.class);
    Token result = mock(Token.class);
    when(ctx.getText()).thenReturn("1000");
    when(numberLiteralEvaluator.evaluate(ctx, null)).thenReturn(result);
    compiler.exitIntLiteral(ctx);
    verify(numberLiteralEvaluator).evaluate(ctx, null);
    Assert.assertEquals(1, tokenStack.size());
    Assert.assertEquals(tokenStack.getFirst(), result);
    verifyZeroInteractions(variableResolver);
    verifyZeroInteractions(functionResolver);
    verifyZeroInteractions(context);
    verifyZeroInteractions(arithmeticEvaluator);
    verifyZeroInteractions(comparisonExpressionWithOperatorEvaluator);
}
Also used : StellarParser(org.apache.metron.stellar.common.generated.StellarParser) Token(org.apache.metron.stellar.dsl.Token) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Example 2 with Token

use of org.apache.metron.stellar.dsl.Token in project metron by apache.

the class StellarCompilerTest method exitFloatLiteralShouldProperlyParseStringsAsFloats.

@Test
public void exitFloatLiteralShouldProperlyParseStringsAsFloats() throws Exception {
    StellarParser.FloatLiteralContext ctx = mock(StellarParser.FloatLiteralContext.class);
    when(ctx.getText()).thenReturn("1000f");
    Token result = mock(Token.class);
    when(numberLiteralEvaluator.evaluate(ctx, null)).thenReturn(result);
    compiler.exitFloatLiteral(ctx);
    verify(numberLiteralEvaluator).evaluate(ctx, null);
    Assert.assertEquals(1, tokenStack.size());
    Assert.assertEquals(tokenStack.getFirst(), result);
    verifyZeroInteractions(variableResolver);
    verifyZeroInteractions(functionResolver);
    verifyZeroInteractions(context);
    verifyZeroInteractions(arithmeticEvaluator);
    verifyZeroInteractions(comparisonExpressionWithOperatorEvaluator);
}
Also used : StellarParser(org.apache.metron.stellar.common.generated.StellarParser) Token(org.apache.metron.stellar.dsl.Token) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Example 3 with Token

use of org.apache.metron.stellar.dsl.Token in project metron by apache.

the class StellarCompiler method exitVariable.

@Override
public void exitVariable(StellarParser.VariableContext ctx) {
    final FrameContext.Context context = getArgContext();
    expression.tokenDeque.push(new Token<>((tokenDeque, state) -> {
        String varName = ctx.getText();
        if (state.context.getActivityType().equals(ActivityType.PARSE_ACTIVITY) && !state.variableResolver.exists(varName)) {
            // when parsing, missing variables are an error!
            throw new ParseException(String.format("variable: %s is not defined", varName));
        }
        tokenDeque.push(new Token<>(state.variableResolver.resolve(varName), Object.class, context));
    }, DeferredFunction.class, context));
    expression.variablesUsed.add(ctx.getText());
}
Also used : ArithmeticEvaluator(org.apache.metron.stellar.common.evaluators.ArithmeticEvaluator) HashMap(java.util.HashMap) FunctionMarker(org.apache.metron.stellar.dsl.FunctionMarker) Deque(java.util.Deque) StellarParser(org.apache.metron.stellar.common.generated.StellarParser) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Pair(org.apache.commons.lang3.tuple.Pair) Map(java.util.Map) StringEscapeUtils(org.apache.commons.lang3.StringEscapeUtils) LinkedList(java.util.LinkedList) Context(org.apache.metron.stellar.dsl.Context) FunctionResolver(org.apache.metron.stellar.dsl.functions.resolver.FunctionResolver) VariableResolver(org.apache.metron.stellar.dsl.VariableResolver) Iterator(java.util.Iterator) Collection(java.util.Collection) ActivityType(org.apache.metron.stellar.dsl.Context.ActivityType) Set(java.util.Set) StellarFunction(org.apache.metron.stellar.dsl.StellarFunction) ComparisonExpressionWithOperatorEvaluator(org.apache.metron.stellar.common.evaluators.ComparisonExpressionWithOperatorEvaluator) StellarBaseListener(org.apache.metron.stellar.common.generated.StellarBaseListener) String.format(java.lang.String.format) Serializable(java.io.Serializable) List(java.util.List) NumberLiteralEvaluator(org.apache.metron.stellar.common.evaluators.NumberLiteralEvaluator) ConversionUtils(org.apache.metron.stellar.common.utils.ConversionUtils) Token(org.apache.metron.stellar.dsl.Token) ArrayDeque(java.util.ArrayDeque) ParseException(org.apache.metron.stellar.dsl.ParseException) Joiner(com.google.common.base.Joiner) Token(org.apache.metron.stellar.dsl.Token) ParseException(org.apache.metron.stellar.dsl.ParseException)

Example 4 with Token

use of org.apache.metron.stellar.dsl.Token in project metron by apache.

the class StellarCompilerTest method exitLongLiteralShouldProperlyParseStringsAsLongs.

@Test
public void exitLongLiteralShouldProperlyParseStringsAsLongs() throws Exception {
    StellarParser.LongLiteralContext ctx = mock(StellarParser.LongLiteralContext.class);
    when(ctx.getText()).thenReturn("1000l");
    Token result = mock(Token.class);
    when(numberLiteralEvaluator.evaluate(ctx, null)).thenReturn(result);
    compiler.exitLongLiteral(ctx);
    verify(numberLiteralEvaluator).evaluate(ctx, null);
    Assert.assertEquals(1, tokenStack.size());
    Assert.assertEquals(tokenStack.getFirst(), result);
    verifyZeroInteractions(variableResolver);
    verifyZeroInteractions(functionResolver);
    verifyZeroInteractions(context);
    verifyZeroInteractions(arithmeticEvaluator);
    verifyZeroInteractions(comparisonExpressionWithOperatorEvaluator);
}
Also used : StellarParser(org.apache.metron.stellar.common.generated.StellarParser) Token(org.apache.metron.stellar.dsl.Token) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Example 5 with Token

use of org.apache.metron.stellar.dsl.Token in project metron by apache.

the class StellarCompilerTest method properlyCompareTwoNumbers.

@Test
public void properlyCompareTwoNumbers() throws Exception {
    StellarParser.ComparisonExpressionWithOperatorContext ctx = mock(StellarParser.ComparisonExpressionWithOperatorContext.class);
    StellarParser.ComparisonOpContext mockOp = mock(StellarParser.ComparisonOpContext.class);
    when(ctx.comp_operator()).thenReturn(mockOp);
    Token result = mock(Token.class);
    when(comparisonExpressionWithOperatorEvaluator.evaluate(any(Token.class), any(Token.class), any(StellarParser.ComparisonOpContext.class), any())).thenReturn(result);
    compiler.exitComparisonExpressionWithOperator(ctx);
    Assert.assertEquals(1, tokenStack.size());
    StellarCompiler.DeferredFunction func = (StellarCompiler.DeferredFunction) tokenStack.pop().getValue();
    tokenStack.push(new Token<>(1000, Integer.class, null));
    tokenStack.push(new Token<>(1500f, Float.class, null));
    func.apply(tokenStack, new StellarCompiler.ExpressionState(context, functionResolver, variableResolver));
    Assert.assertEquals(1, tokenStack.size());
    Assert.assertEquals(tokenStack.getFirst(), result);
    verify(comparisonExpressionWithOperatorEvaluator).evaluate(any(Token.class), any(Token.class), eq(mockOp), any());
    verifyZeroInteractions(numberLiteralEvaluator);
    verifyZeroInteractions(variableResolver);
    verifyZeroInteractions(functionResolver);
    verifyZeroInteractions(context);
    verifyZeroInteractions(arithmeticEvaluator);
}
Also used : StellarParser(org.apache.metron.stellar.common.generated.StellarParser) Token(org.apache.metron.stellar.dsl.Token) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Aggregations

StellarParser (org.apache.metron.stellar.common.generated.StellarParser)6 Token (org.apache.metron.stellar.dsl.Token)6 Test (org.junit.Test)5 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)5 Joiner (com.google.common.base.Joiner)1 Serializable (java.io.Serializable)1 String.format (java.lang.String.format)1 ArrayDeque (java.util.ArrayDeque)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Deque (java.util.Deque)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1 StringEscapeUtils (org.apache.commons.lang3.StringEscapeUtils)1 Pair (org.apache.commons.lang3.tuple.Pair)1