1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.events.handlers;
18
19 import org.hipparchus.ode.events.Action;
20 import org.junit.Assert;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.orekit.Utils;
24 import org.orekit.frames.Frame;
25 import org.orekit.frames.FramesFactory;
26 import org.orekit.orbits.KeplerianOrbit;
27 import org.orekit.orbits.Orbit;
28 import org.orekit.orbits.PositionAngle;
29 import org.orekit.propagation.SpacecraftState;
30 import org.orekit.propagation.events.DateDetector;
31 import org.orekit.time.AbsoluteDate;
32 import org.orekit.utils.Constants;
33
34
35
36
37
38
39 public class EventMultipleHandlerTest {
40
41 @Before
42 public void setUp() {
43 Utils.setDataRoot("regular-data");
44 }
45
46
47
48
49 @Test
50 public void testEventOccurred() {
51
52 ContinueOnEvent<DateDetector> handler1 = new ContinueOnEvent<>();
53 StopOnEvent<DateDetector> handler2 = new StopOnEvent<>();
54 StopOnDecreasing<DateDetector> handler3 = new StopOnDecreasing<>();
55 AbsoluteDate date = AbsoluteDate.J2000_EPOCH;
56 DateDetector detector = new DateDetector(date);
57 Frame eci = FramesFactory.getGCRF();
58 Orbit orbit = new KeplerianOrbit(6378137 + 500e3, 0, 0, 0, 0, 0,
59 PositionAngle.TRUE, eci, date, Constants.EIGEN5C_EARTH_MU);
60 SpacecraftState s = new SpacecraftState(orbit);
61
62
63 EventMultipleHandler<DateDetector> facade1 = new EventMultipleHandler<DateDetector>().addHandler(handler1).addHandler(handler2);
64 Assert.assertEquals(Action.STOP, facade1.eventOccurred(s, detector, true));
65
66 EventMultipleHandler<DateDetector> facade2 = new EventMultipleHandler<DateDetector>().addHandler(handler1).addHandler(handler3);
67 Assert.assertEquals(Action.CONTINUE, facade2.eventOccurred(s, detector, true));
68 }
69
70
71
72
73 @Test
74 public void testResetState() {
75
76 ContinueOnEvent<DateDetector> handler1 = new ContinueOnEvent<>();
77 AbsoluteDate date = AbsoluteDate.J2000_EPOCH;
78 DateDetector detector = new DateDetector(date);
79 Frame eci = FramesFactory.getGCRF();
80 Orbit orbit = new KeplerianOrbit(6378137 + 500e3, 0, 0, 0, 0, 0,
81 PositionAngle.TRUE, eci, date, Constants.EIGEN5C_EARTH_MU);
82 SpacecraftState s = new SpacecraftState(orbit);
83
84
85 EventHandler<DateDetector> handler2 = getHandler(10);
86 EventHandler<DateDetector> handler3 = getHandler(20);
87 EventMultipleHandler<DateDetector> facade = new EventMultipleHandler<DateDetector>().addHandlers(handler1, handler2, handler3);
88
89
90 Assert.assertEquals(Action.RESET_STATE, facade.eventOccurred(s, detector, true));
91 Assert.assertEquals(s.shiftedBy(30).getOrbit().getDate(), facade.resetState(detector, s).getOrbit().getDate());
92 }
93
94
95
96
97 private EventHandler<DateDetector> getHandler(double timeShift) {
98
99 return new EventHandler<DateDetector>() {
100
101 @Override
102 public Action eventOccurred(SpacecraftState s, DateDetector detector, boolean increasing) {
103 return Action.RESET_STATE;
104 }
105
106 @Override
107 public SpacecraftState resetState(DateDetector detector, SpacecraftState oldState) {
108 return oldState.shiftedBy(timeShift);
109 }
110 };
111 }
112 }