@Test public void authenticationBinding() throws Exception { CoreEvent event = spy(testEvent()); Authentication authentication = new DefaultMuleAuthentication(new DefaultMuleCredentials("username", "password".toCharArray())); when(event.getAuthentication()).thenReturn(of(authentication)); TypedValue result = expressionLanguage.evaluate(AUTHENTICATION, event, BindingContext.builder().build()); assertThat(result.getValue(), is(instanceOf(Authentication.class))); assertThat(result.getValue(), is(authentication)); assertThat(result.getDataType().getType(), is(equalTo(Authentication.class))); }
@Test public void errorMessageContainsDataweaveExceptionCauseMessage() throws Exception { Error error = mock(Error.class); Optional opt = Optional.of(error); CoreEvent event = getEventWithError(opt); doReturn(testEvent().getMessage()).when(event).getMessage(); String expressionThatThrowsException = "payload + 'foo'"; expectedEx.expect(ExpressionRuntimeException.class); expectedEx.expectMessage(containsString("You called the function '+' with these arguments")); expectedEx.expectMessage(containsString("evaluating expression: \"" + expressionThatThrowsException)); expressionLanguage.evaluate(expressionThatThrowsException, event, BindingContext.builder().build()); }
@Test public void errorBinding() throws Exception { Error error = mock(Error.class); Optional opt = Optional.of(error); CoreEvent event = getEventWithError(opt); doReturn(testEvent().getMessage()).when(event).getMessage(); TypedValue result = expressionLanguage.evaluate(ERROR, event, BindingContext.builder().build()); assertThat(result.getValue(), is(sameInstance(error))); }
@Test public void accessServerFileSeparator() throws MuleException { CoreEvent event = testEvent(); when(registry.lookupByName("myBean")).thenReturn(of(new MyBean("DataWeave"))); TypedValue evaluate = expressionLanguage.evaluate("server.fileSeparator", event, BindingContext.builder().build()); assertThat(evaluate.getValue(), is(FILE_SEPARATOR)); }
@Test public void attributesBinding() throws Exception { CoreEvent event = getEventWithError(empty()); SomeAttributes attributes = new SomeAttributes(); InternalMessage message = (InternalMessage) Message.builder().nullValue().attributesValue(attributes).build(); when(event.getMessage()).thenReturn(message); TypedValue result = expressionLanguage.evaluate(ATTRIBUTES, event, BindingContext.builder().build()); assertThat(result.getValue(), is(equalTo(attributes))); assertThat(result.getDataType().getType(), is((equalTo(SomeAttributes.class)))); }
@Test public void mvelWithNullBinding() throws MuleException { String expression = "#[mel: 2+2 ==4]"; TypedValue result = expressionManager .evaluate(expression, BOOLEAN, builder().addBinding("payload", new TypedValue(null, OBJECT)).build(), testEvent()); assertThat(result.getValue(), is(true)); assertThat(result.getDataType(), is(BOOLEAN)); }
@Test @Description("Verifies that a simple transformation works even when it's not required.") public void transformationNotNeeded() throws MuleException { String expression = "payload"; TypedValue result = expressionManager.evaluate(expression, STRING, builder().build(), testEvent()); assertThat(result.getValue(), is(TEST_PAYLOAD)); assertThat(result.getDataType(), is(STRING)); }
@Test @Description("Verifies that a simple transformation works.") public void transformation() throws MuleException { String expression = "payload"; TypedValue result = expressionManager.evaluate(expression, BYTE_ARRAY, builder().build(), testEvent()); assertThat(result.getValue(), is(TEST_PAYLOAD.getBytes())); assertThat(result.getDataType(), is(BYTE_ARRAY)); }
@Test public void accessRegistryBean() throws MuleException { CoreEvent event = testEvent(); when(registry.lookupByName("myBean")).thenReturn(of(new MyBean("DataWeave"))); TypedValue evaluate = expressionLanguage.evaluate("app.registry.myBean.name", event, BindingContext.builder().build()); assertThat(evaluate.getValue(), is("DataWeave")); }
@Test public void shouldBeAddedToBindingContext() { BindingContext.Builder bindingContextBuilder = BindingContext.builder(); ExpressionModule.Builder builder = ExpressionModule.builder(namespace); builder.addBinding("id", typedValue); ExpressionModule module = builder.build(); bindingContextBuilder.addModule(module); BindingContext bindingContext = bindingContextBuilder.build(); assertThat(bindingContext.modules(), hasSize(1)); assertThat(bindingContext.modules(), hasItem(module)); }
@Override public BindingContext getBindingContext() { TestExpressionFunction function = new TestExpressionFunction(); return builder() .addBinding("number", new TypedValue(1, NUMBER)) .addBinding("repeat", new TypedValue(function, fromFunction(function))) .build(); } }
@Test public void unbalancedBrackets() throws MuleException { CoreEvent event = eventBuilder(muleContext).message(Message.of(TEST_PAYLOAD)).build(); expectedEx.expect(ExpressionExecutionException.class); expectedEx.expectMessage(containsString("Unbalanced brackets in expression")); expressionLanguage.evaluate("#[unbalanced", event, BindingContext.builder().build()); }
@Test public void accessMuleVersion() throws MuleException { CoreEvent event = testEvent(); when(registry.lookupByName("myBean")).thenReturn(of(new MyBean("DataWeave"))); TypedValue evaluate = expressionLanguage.evaluate("mule.version", event, BindingContext.builder().build()); assertThat(evaluate.getValue(), is(MuleManifest.getProductVersion())); }
@Test public void authenticationBindingWhenNullSecurityContext() throws Exception { CoreEvent event = spy(testEvent()); TypedValue result = expressionLanguage.evaluate(AUTHENTICATION, event, BindingContext.builder().build()); assertThat(result.getValue(), is(nullValue())); }
@Test public void stringExpression() throws Exception { TypedValue result = expressionLanguage.evaluate("\"hey\"", testEvent(), BindingContext.builder().build()); assertThat(result.getValue(), is("hey")); assertThat(result.getDataType(), is(assignableTo(STRING))); }
protected TypedValue evaluateTyped(String expression, CoreEvent event) throws Exception { if (variant.equals(Variant.EXPRESSION_WITH_DELIMITER)) { return mvel.evaluate("#[mel:" + expression + "]", event, CoreEvent.builder(event), ((Component) flowConstruct).getLocation(), BindingContext.builder().build()); } else { return mvel.evaluate(expression, event, CoreEvent.builder(event), ((Component) flowConstruct).getLocation(), BindingContext.builder().build()); } }
@SuppressWarnings("deprecation") protected Object evaluate(String expression, CoreEvent event, CoreEvent.Builder eventBuilder) { return expressionLanguage.evaluate(expression, event, eventBuilder, ((Component) flowConstruct).getLocation(), BindingContext.builder().build()) .getValue(); }