1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.core.joran.action;
15
16 import org.junit.jupiter.api.Assertions;
17 import org.junit.jupiter.api.BeforeEach;
18 import org.junit.jupiter.api.Test;
19
20 import ch.qos.logback.core.Context;
21 import ch.qos.logback.core.ContextBase;
22 import ch.qos.logback.core.joran.spi.SaxEventInterpretationContext;
23
24
25
26
27 public class PreconditionValidatorTest {
28
29 IncludeAction includeAction = new IncludeAction();
30 Context context;
31 SaxEventInterpretationContext interpretationContext;
32 DummyAttributes attributes;
33 String tagName = "testTag";
34
35 @BeforeEach
36 public void setUp() {
37 context = new ContextBase();
38 includeAction.setContext(context);
39 interpretationContext = new SaxEventInterpretationContext(context, null);
40 attributes = new DummyAttributes();
41 }
42
43 @Test
44 public void validateOneAndOnlyOneAttributeProvided_withExactlyOneValidAttribute() {
45 attributes.setValue("file", "test.txt");
46
47 PreconditionValidator validator = new PreconditionValidator(includeAction, interpretationContext, tagName, attributes);
48 validator.validateOneAndOnlyOneAttributeProvided("file", "url", "resource");
49
50 Assertions.assertTrue(validator.isValid());
51 }
52
53 @Test
54 public void validateOneAndOnlyOneAttributeProvided_withTwoValidAttributes() {
55 attributes.setValue("file", "test.txt");
56 attributes.setValue("url", "http://example.com");
57
58 PreconditionValidator validator = new PreconditionValidator(includeAction, interpretationContext, tagName, attributes);
59 validator.validateOneAndOnlyOneAttributeProvided("file", "url", "resource");
60
61 Assertions.assertFalse(validator.isValid());
62 Assertions.assertEquals(1, context.getStatusManager().getCount());
63 }
64
65 @Test
66 public void validateOneAndOnlyOneAttributeProvided_withNoValidAttributes() {
67 PreconditionValidator validator = new PreconditionValidator(includeAction, interpretationContext, tagName, attributes);
68 validator.validateOneAndOnlyOneAttributeProvided("file", "url", "resource");
69
70 Assertions.assertFalse(validator.isValid());
71 Assertions.assertEquals(1, context.getStatusManager().getCount());
72 }
73
74 @Test
75 public void validateOneAndOnlyOneAttributeProvided_withEmptyStringAttribute() {
76 attributes.setValue("file", "");
77
78 PreconditionValidator validator = new PreconditionValidator(includeAction, interpretationContext, tagName, attributes);
79 validator.validateOneAndOnlyOneAttributeProvided("file", "url", "resource");
80
81 Assertions.assertFalse(validator.isValid());
82 }
83
84 @Test
85 public void validateOneAndOnlyOneAttributeProvided_withWhitespaceOnlyAttribute() {
86 attributes.setValue("file", " ");
87
88 PreconditionValidator validator = new PreconditionValidator(includeAction, interpretationContext, tagName, attributes);
89 validator.validateOneAndOnlyOneAttributeProvided("file", "url", "resource");
90
91 Assertions.assertFalse(validator.isValid());
92 }
93
94 @Test
95 public void validateOneAndOnlyOneAttributeProvided_withOneValidAndOneInvalidAttribute() {
96 attributes.setValue("file", "test.txt");
97 attributes.setValue("url", "");
98
99 PreconditionValidator validator = new PreconditionValidator(includeAction, interpretationContext, tagName, attributes);
100 validator.validateOneAndOnlyOneAttributeProvided("file", "url", "resource");
101
102 Assertions.assertTrue(validator.isValid());
103 }
104
105 @Test
106 public void validateOneAndOnlyOneAttributeProvided_withThreeValidAttributes() {
107 attributes.setValue("file", "test.txt");
108 attributes.setValue("url", "http://example.com");
109 attributes.setValue("resource", "config.xml");
110
111 PreconditionValidator validator = new PreconditionValidator(includeAction, interpretationContext, tagName, attributes);
112 validator.validateOneAndOnlyOneAttributeProvided("file", "url", "resource");
113
114 Assertions.assertFalse(validator.isValid());
115 Assertions.assertEquals(1, context.getStatusManager().getCount());
116 }
117
118 @Test
119 public void validateOneAndOnlyOneAttributeProvided_withSingleAttributeOption() {
120 attributes.setValue("name", "testName");
121
122 PreconditionValidator validator = new PreconditionValidator(includeAction, interpretationContext, tagName, attributes);
123 validator.validateOneAndOnlyOneAttributeProvided("name");
124
125 Assertions.assertTrue(validator.isValid());
126 }
127
128 @Test
129 public void validateOneAndOnlyOneAttributeProvided_withNullAttribute() {
130 attributes.setValue("file", null);
131
132 PreconditionValidator validator = new PreconditionValidator(includeAction, interpretationContext, tagName, attributes);
133 validator.validateOneAndOnlyOneAttributeProvided("file", "url");
134
135 Assertions.assertFalse(validator.isValid());
136 }
137 }