update copyright
[reguloj.git] / src / test / java / wtf / metio / reguloj / JavaUtilFunctionRuleTest.java
blobe35085fc4d752e624d751114450fc0ae0a82498e
1 /*
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
5 * in the LICENSE file.
6 */
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;
26 @BeforeEach
27 void setup() {
28 context = Mockito.mock(Context.class);
29 predicate = Mockito.mock(Predicate.class);
30 consumer = Mockito.mock(Consumer.class);
33 @Test
34 void shouldCreateRuleIfAllValuesAreSet() {
35 final var rule = new JavaUtilFunctionRule<>(NAME, predicate, consumer);
36 Assertions.assertNotNull(rule);
39 @Test
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));
46 @Test
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));
53 @Test
54 void shouldReturnTheSetName() {
55 final var rule = new JavaUtilFunctionRule<>(NAME, predicate, consumer);
56 Assertions.assertEquals(NAME, rule.name());
59 @Test
60 void equalsIsReflexive() {
61 final var rule = new JavaUtilFunctionRule<>(NAME, predicate, consumer);
62 Assertions.assertEquals(rule, rule);
65 @Test
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);
73 @Test
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);
83 @Test
84 void equalsReturnFalseOnNull() {
85 final var rule = new JavaUtilFunctionRule<>(NAME, predicate, consumer);
86 Assertions.assertNotEquals(null, rule);
89 @Test
90 void equalsReturnFalseOnWrongClass() {
91 final var rule = new JavaUtilFunctionRule<>(NAME, predicate, consumer);
92 Assertions.assertNotEquals("", rule);
95 @Test
96 void equalsWorks() {
97 final var rule1 = new JavaUtilFunctionRule<>(NAME, predicate, consumer);
98 final var rule2 = rule1;
99 Assertions.assertEquals(rule1, rule2);
102 @Test
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);
109 @Test
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);
117 @Test
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);
125 @Test
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());