2 * This file is part of reguloj. It is subject to the license terms in the LICENSE file found in the top-level
3 * directory of this distribution and at https://creativecommons.org/publicdomain/zero/1.0/. No part of reguloj,
4 * including this file, may be copied, modified, propagated, or distributed except according to the terms contained
8 package wtf
.metio
.reguloj
;
10 import java
.util
.function
.Consumer
;
11 import java
.util
.function
.Predicate
;
12 import org
.junit
.jupiter
.api
.Assertions
;
13 import org
.junit
.jupiter
.api
.BeforeEach
;
14 import org
.junit
.jupiter
.api
.Test
;
15 import org
.mockito
.BDDMockito
;
16 import org
.mockito
.Mockito
;
18 final class JavaUtilFunctionRuleTest
{
20 private static final String NAME
= "test rule";
22 private Context
<Object
> context
;
23 private Predicate
<Context
<Object
>> predicate
;
24 private Consumer
<Context
<Object
>> consumer
;
28 context
= Mockito
.mock(Context
.class);
29 predicate
= Mockito
.mock(Predicate
.class);
30 consumer
= Mockito
.mock(Consumer
.class);
34 void shouldCreateRuleIfAllValuesAreSet() {
35 final var rule
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
36 Assertions
.assertNotNull(rule
);
40 void shouldReturnFalseWhenPremiseDoesNotApply() {
41 BDDMockito
.given(predicate
.test(context
)).willReturn(Boolean
.FALSE
);
42 final var rule
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
43 Assertions
.assertFalse(rule
.fires(context
));
47 void shouldFireWhenPremiseApplies() {
48 BDDMockito
.given(predicate
.test(context
)).willReturn(Boolean
.TRUE
);
49 final var rule
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
50 Assertions
.assertTrue(rule
.fires(context
));
54 void shouldReturnTheSetName() {
55 final var rule
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
56 Assertions
.assertEquals(NAME
, rule
.name());
60 void equalsIsReflexive() {
61 final var rule
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
62 Assertions
.assertEquals(rule
, rule
);
66 void equalsIsSymmetric() {
67 final var rule1
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
68 final var rule2
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
69 Assertions
.assertEquals(rule1
, rule2
);
70 Assertions
.assertEquals(rule2
, rule1
);
74 void equalsIsTransitive() {
75 final var rule1
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
76 final var rule2
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
77 final var rule3
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
78 Assertions
.assertEquals(rule1
, rule2
);
79 Assertions
.assertEquals(rule2
, rule3
);
80 Assertions
.assertEquals(rule3
, rule1
);
84 void equalsReturnFalseOnNull() {
85 final var rule
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
86 Assertions
.assertNotEquals(null, rule
);
90 void equalsReturnFalseOnWrongClass() {
91 final var rule
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
92 Assertions
.assertNotEquals("", rule
);
97 final var rule1
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
98 final var rule2
= rule1
;
99 Assertions
.assertEquals(rule1
, rule2
);
103 void equalsWorksWithDifferentNames() {
104 final var rule1
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
105 final var rule2
= new JavaUtilFunctionRule
<>("rule2", predicate
, consumer
); //$NON-NLS-1$
106 Assertions
.assertNotEquals(rule1
, rule2
);
110 void equalsWorksWithDifferentPremises() {
111 final var predicate2
= Mockito
.mock(Predicate
.class);
112 final var rule1
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
113 final var rule2
= new JavaUtilFunctionRule
<>(NAME
, predicate2
, consumer
);
114 Assertions
.assertNotEquals(rule1
, rule2
);
118 void equalsWorksWithDifferentConsumer() {
119 final var consumer2
= Mockito
.mock(Consumer
.class);
120 final var rule1
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
121 final var rule2
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer2
);
122 Assertions
.assertNotEquals(rule1
, rule2
);
126 void hashCodeIsConsistentWithEquals() {
127 final var rule1
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
128 final var rule2
= new JavaUtilFunctionRule
<>(NAME
, predicate
, consumer
);
129 Assertions
.assertEquals(rule1
, rule2
);
130 Assertions
.assertEquals(rule1
.hashCode(), rule2
.hashCode());