1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.core.blackbox.joran.conditional;
15
16 import ch.qos.logback.core.joran.conditional.Condition;
17 import ch.qos.logback.core.joran.conditional.PropertyEvalScriptBuilder;
18 import org.junit.jupiter.api.AfterEach;
19 import org.junit.jupiter.api.Assertions;
20 import org.junit.jupiter.api.BeforeEach;
21 import org.junit.jupiter.api.Disabled;
22 import org.junit.jupiter.api.Test;
23
24 import ch.qos.logback.core.Context;
25 import ch.qos.logback.core.ContextBase;
26 import ch.qos.logback.core.model.processor.ModelInterpretationContext;
27 import ch.qos.logback.core.testUtil.RandomUtil;
28
29 public class PropertyEvalScriptBuilderTest {
30
31 Context context = new ContextBase();
32 ModelInterpretationContext localPropContainer = new ModelInterpretationContext(context);
33 PropertyEvalScriptBuilder pesb = new PropertyEvalScriptBuilder(localPropContainer);
34 int diff = RandomUtil.getPositiveInt();
35
36 String k = "ka" + diff;
37 String v = "va";
38 String containsScript = "p(\"" + k + "\").contains(\"" + v + "\")";
39
40 String isNullScriptStr = "isNull(\"" + k + "\")";
41 String isDefiedScriptStr = "isDefined(\"" + k + "\")";
42
43 @BeforeEach
44 public void setUp() {
45 context.setName("c" + diff);
46 pesb.setContext(context);
47 }
48
49 @AfterEach
50 public void tearDown() {
51 System.clearProperty(k);
52 }
53
54 void buildAndAssertTrue(String scriptStr) throws Exception {
55 Condition condition = pesb.build(scriptStr);
56 Assertions.assertNotNull(condition);
57 Assertions.assertTrue(condition.evaluate());
58 }
59
60 void buildAndAssertFalse(String scriptStr) throws Exception {
61 Condition condition = pesb.build(scriptStr);
62 Assertions.assertNotNull(condition);
63 Assertions.assertFalse(condition.evaluate());
64 }
65
66 @Test
67 public void existingLocalPropertyShouldEvaluateToTrue() throws Exception {
68 localPropContainer.addSubstitutionProperty(k, v);
69 buildAndAssertTrue(containsScript);
70 }
71
72 @Test
73 public void existingContextPropertyShouldEvaluateToTrue() throws Exception {
74 context.putProperty(k, v);
75 buildAndAssertTrue(containsScript);
76 }
77
78 @Test
79 public void existingSystemPropertyShouldEvaluateToTrue() throws Exception {
80 System.setProperty(k, v);
81 buildAndAssertTrue(containsScript);
82 }
83
84 @Test
85 public void isNullForExistingLocalProperty() throws Exception {
86 localPropContainer.addSubstitutionProperty(k, v);
87 buildAndAssertFalse(isNullScriptStr);
88 }
89
90 @Test
91 public void isNullForExistingContextProperty() throws Exception {
92 context.putProperty(k, v);
93 buildAndAssertFalse(isNullScriptStr);
94 }
95
96 @Test
97 public void isNullForExistingSystemProperty() throws Exception {
98 System.setProperty(k, v);
99 buildAndAssertFalse(isNullScriptStr);
100 }
101
102 @Test
103 public void inexistentPropertyShouldEvaluateToFalse() throws Exception {
104 buildAndAssertFalse(containsScript);
105 }
106
107 @Test
108 public void isNullForInexistentPropertyShouldEvaluateToTrue() throws Exception {
109 buildAndAssertTrue(isNullScriptStr);
110 }
111
112 public void isDefinedForIExistimgtPropertyShouldEvaluateToTrue() throws Exception {
113 localPropContainer.addSubstitutionProperty(k, v);
114 buildAndAssertTrue(isDefiedScriptStr);
115 }
116
117 @Test
118 public void isDefinedForInexistentPropertyShouldEvaluateToTrue() throws Exception {
119 buildAndAssertFalse(isDefiedScriptStr);
120 }
121
122 }