1   /* Copyright 2022-2025 Romain Serra
2    * Licensed to CS GROUP (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.propagation.events;
18  
19  import org.junit.jupiter.api.Test;
20  import org.mockito.Mockito;
21  import org.orekit.propagation.SpacecraftState;
22  import org.orekit.propagation.events.handlers.ContinueOnEvent;
23  import org.orekit.propagation.events.handlers.EventHandler;
24  import org.orekit.time.AbsoluteDate;
25  
26  import static org.junit.jupiter.api.Assertions.*;
27  
28  class BooleanDetectorTest {
29  
30      @Test
31      void testInit() {
32          // GIVEN
33          final TestDetector detector = new TestDetector();
34          final BooleanDetector booleanDetector = BooleanDetector.andCombine(detector);
35          final AbsoluteDate date = AbsoluteDate.ARBITRARY_EPOCH;
36          final SpacecraftState mockedState = Mockito.mock(SpacecraftState.class);
37          Mockito.when(mockedState.getDate()).thenReturn(date);
38          // WHEN
39          booleanDetector.init(mockedState, date);
40          // THEN
41          assertFalse(detector.finished);
42          assertFalse(detector.resetted);
43          assertTrue(detector.initialized);
44      }
45  
46      @Test
47      void testReset() {
48          // GIVEN
49          final TestDetector detector = new TestDetector();
50          final BooleanDetector booleanDetector = BooleanDetector.orCombine(detector);
51          final AbsoluteDate date = AbsoluteDate.ARBITRARY_EPOCH;
52          final SpacecraftState mockedState = Mockito.mock(SpacecraftState.class);
53          Mockito.when(mockedState.getDate()).thenReturn(date);
54          // WHEN
55          booleanDetector.reset(mockedState, date);
56          // THEN
57          assertTrue(detector.resetted);
58          assertFalse(detector.finished);
59          assertFalse(detector.initialized);
60      }
61  
62      @Test
63      void testFinish() {
64          // GIVEN
65          final TestDetector detector = new TestDetector();
66          final BooleanDetector booleanDetector = BooleanDetector.orCombine(detector);
67          final AbsoluteDate date = AbsoluteDate.ARBITRARY_EPOCH;
68          final SpacecraftState mockedState = Mockito.mock(SpacecraftState.class);
69          Mockito.when(mockedState.getDate()).thenReturn(date);
70          // WHEN
71          booleanDetector.finish(mockedState);
72          // THEN
73          assertTrue(detector.finished);
74          assertFalse(detector.resetted);
75          assertFalse(detector.initialized);
76      }
77  
78      private static class TestDetector implements EventDetector {
79  
80          boolean initialized = false;
81          boolean resetted = false;
82          boolean finished = false;
83  
84          @Override
85          public double g(SpacecraftState s) {
86              return 1;
87          }
88  
89          @Override
90          public void init(SpacecraftState s0, AbsoluteDate t) {
91              EventDetector.super.init(s0, t);
92              initialized = true;
93          }
94  
95          @Override
96          public void reset(SpacecraftState state, AbsoluteDate target) {
97              EventDetector.super.reset(state, target);
98              resetted = true;
99          }
100 
101         @Override
102         public void finish(SpacecraftState state) {
103             EventDetector.super.finish(state);
104             finished = true;
105         }
106 
107         @Override
108         public EventHandler getHandler() {
109             return new ContinueOnEvent();
110         }
111     }
112 }