LRAUV  revA
ValueDetect_Test.h
Go to the documentation of this file.
1 
9 #ifndef _VALUEDETECT_TEST_H_
10 #define _VALUEDETECT_TEST_H_
11 
15 
17 #include "data/Slate.h"
19 #include "logger/LogEngine.h"
20 #include "units/Units.h"
21 
22 #include <cxxtest/TestSuite.h>
23 
29 class ValueDetect_Test : public CxxTest::TestSuite
30 {
31 public:
32 
33  // Ensures the syslog is empty at the end of the run.
34  void tearDown( void )
35  {
36  LogEngine logEngine;
38  }
39 
40  // run test with delta
41  void testRunDelta( void )
42  {
44  BehaviorRegistry::Insert( ValueDetectIF::NAME, &ValueDetect::CreateBehavior, NULL );
45  TestAsyncComponent testComponent( "ValueDetect_TestComponent" );
46 
47  // Slate input variables
49 
50  // Build up the behavior as if it were expressed in XML
51  MissionNode valueDetectNode( "Trigger:ValueDetect" );
52  valueDetectNode.appendChild( "Parallel" );
53  MissionNode* detectSettingNode( valueDetectNode.appendChild( "Setting" ) );
54  detectSettingNode->appendChild( "Trigger:ValueDetect.detect" );
55  detectSettingNode->appendChild( "Universal:sea_water_temperature" );
56  MissionNode* valueSettingNode( valueDetectNode.appendChild( "Setting" ) );
57  valueSettingNode->appendChild( "Trigger:ValueDetect.value" );
58  valueSettingNode->appendChild( "Units:celsius" );
59  valueSettingNode->appendChild( "Value" )->appendChildText( "10" );
60  MissionNode* deltaSettingNode( valueDetectNode.appendChild( "Setting" ) );
61  deltaSettingNode->appendChild( "Trigger:ValueDetect.delta" );
62  deltaSettingNode->appendChild( "Units:kelvin" );
63  deltaSettingNode->appendChild( "Value" )->appendChildText( "0.1" );
64 
65  // Convert the virtual XML to a behavior
66  MissionItem* valueDetectMissionItem( MissionItem::Instance( NULL, &valueDetectNode, 0, testComponent.getLogger() ) );
67  ValueDetect* valueDetectPtr = ( ValueDetect* )( valueDetectMissionItem->getComponent() );
68  ValueDetect& valueDetect( *valueDetectPtr );
69 
70  // Initialize the behavior
71  valueDetect.initialize();
72 
73  bool satisfied = valueDetect.runIfUnsatisfied();
74  TS_ASSERT( !satisfied );
75 
76  valueWriter->writeWithAccuracy( Units::CELSIUS, 11.0, 0.05 );
77  satisfied = valueDetect.runIfUnsatisfied();
78  TS_ASSERT( !satisfied );
79 
80  valueWriter->writeWithAccuracy( Units::CELSIUS, 10.05, 0.05 );
81  satisfied = valueDetect.runIfUnsatisfied();
82  TS_ASSERT( satisfied );
83 
84  valueWriter->writeWithAccuracy( Units::CELSIUS, 10.0, 0.05 );
85  satisfied = valueDetect.runIfUnsatisfied();
86  TS_ASSERT( satisfied );
87 
88  valueWriter->writeWithAccuracy( Units::CELSIUS, 9.0, 0.05 );
89  satisfied = valueDetect.runIfUnsatisfied();
90  TS_ASSERT( !satisfied );
91 
92  // cleanup
93  valueDetect.uninitialize();
94  delete valueDetectMissionItem;
96  }
97 
98  // run test with no delta
99  void testRunNoDelta( void )
100  {
102  BehaviorRegistry::Insert( ValueDetectIF::NAME, &ValueDetect::CreateBehavior, NULL );
103  TestAsyncComponent testComponent( "ValueDetect_TestComponent" );
104 
105  // Slate input variables
107 
108  // Build up the behavior as if it were expressed in XML
109  MissionNode valueDetectNode( "Trigger:ValueDetect" );
110  valueDetectNode.appendChild( "Parallel" );
111  MissionNode* detectSettingNode( valueDetectNode.appendChild( "Setting" ) );
112  detectSettingNode->appendChild( "Trigger:ValueDetect.detect" );
113  detectSettingNode->appendChild( "Universal:sea_water_temperature" );
114  MissionNode* valueSettingNode( valueDetectNode.appendChild( "Setting" ) );
115  valueSettingNode->appendChild( "Trigger:ValueDetect.value" );
116  valueSettingNode->appendChild( "Units:celsius" );
117  valueSettingNode->appendChild( "Value" )->appendChildText( "10" );
118 
119  // Convert the virtual XML to a behavior
120  MissionItem* valueDetectMissionItem( MissionItem::Instance( NULL, &valueDetectNode, 0, testComponent.getLogger() ) );
121  ValueDetect* valueDetectPtr = ( ValueDetect* )( valueDetectMissionItem->getComponent() );
122  ValueDetect& valueDetect( *valueDetectPtr );
123 
124  // Initialize the behavior
125  valueDetect.initialize();
126 
127  bool satisfied = valueDetect.runIfUnsatisfied();
128  TS_ASSERT( !satisfied );
129 
130  valueWriter->writeWithAccuracy( Units::CELSIUS, 11.0, 0.05 );
131  satisfied = valueDetect.runIfUnsatisfied();
132  TS_ASSERT( !satisfied );
133 
134  valueWriter->writeWithAccuracy( Units::CELSIUS, 10.05, 0.05 );
135  satisfied = valueDetect.runIfUnsatisfied();
136  TS_ASSERT( !satisfied );
137 
138  valueWriter->writeWithAccuracy( Units::CELSIUS, 10.0, 0.05 );
139  satisfied = valueDetect.runIfUnsatisfied();
140  TS_ASSERT( satisfied );
141 
142  valueWriter->writeWithAccuracy( Units::CELSIUS, 9.0, 0.05 );
143  satisfied = valueDetect.runIfUnsatisfied();
144  TS_ASSERT( satisfied );
145 
146  valueWriter->writeWithAccuracy( Units::CELSIUS, 8.0, 0.05 );
147  satisfied = valueDetect.runIfUnsatisfied();
148  TS_ASSERT( !satisfied );
149 
150  valueWriter->writeWithAccuracy( Units::CELSIUS, 11.0, 0.05 );
151  satisfied = valueDetect.runIfUnsatisfied();
152  TS_ASSERT( satisfied );
153 
154  // cleanup
155  valueDetect.uninitialize();
156  delete valueDetectMissionItem;
158  }
159 
160 };
161 
162 #endif // _VALUEDETECT_TEST_H
static const UniversalURI SEA_WATER_TEMPERATURE
sea_water_temperature, as defined by CF-metadata
Definition: UniversalURI.h:469
MissionNode * appendChildText(const char *text)
Definition: MissionNode.cpp:227
static const Timespan ZERO_TIMESPAN
Constant value to represent instant of time.
Definition: Timestamp.h:255
void initialize(void)
Initialize function.
Definition: ValueDetect.cpp:68
Contains the AsyncComponent class definition.
static MissionItem * Instance(MissionItem *parent, MissionNode *node, unsigned int tablePos, Logger &logger)
Returns an instance, or NULL if an instance can't be returned.
Definition: MissionItem.cpp:69
virtual bool writeWithAccuracy(const Unit &unit, const unsigned char value, const float accuracy, const Timestamp &timestamp=Timestamp::NOT_SET_TIME)
Sets the Component's DataValue, with precision and an optional timestamp.
Definition: UniversalDataWriter.cpp:29
Wraps a Behavior or Aggregate with mission-specific settings pertaining to that item.
Definition: MissionItem.h:31
Specifies the interface details for the ValueDetect component in the GuidanceModule.
static UniversalDataWriter * NewUniversalWriter(const UniversalURI &universalURI, Component *owner, DataValue *initialValue, const float accuracy=DataElement::NO_ACCURACY)
Definition: Slate.cpp:556
bool runIfUnsatisfied()
Do the run, and return true if envelope "satisfied".
Definition: ValueDetect.cpp:238
A DataAccessor that writes values to the Slate via its associated DataElement.
Definition: UniversalDataWriter.h:24
void tearDown(void)
Definition: ValueDetect_Test.h:34
void uninitialize(void)
Uninit function.
Definition: ValueDetect.cpp:315
static void Insert(const Str &baseName, BehaviorCreator behaviorCreator, const Module *module)
Add the base name and BehaviorCreator to the map.
Definition: BehaviorRegistry.cpp:31
Contains the ValueDetect class declaration.
static void Uninitialize()
Uninitializes the map.
Definition: BehaviorRegistry.cpp:21
Contains the ValueDetect Behavior/Command.
Definition: ValueDetect.h:32
Wraps a TiXmlNode.
Definition: MissionNode.h:20
Component responsible for handling the contents of the LogQueue.
Definition: LogEngine.h:63
Units tests for ValueDetect class.
Definition: ValueDetect_Test.h:29
Contains the LogEngine class definition.
Specifies the interface details for the SpeedControl component in the ControlModule.
Contains the Units class declaration.
MissionNode * appendChild(const char *name)
Definition: MissionNode.cpp:219
void processQueue(const Timespan &timeout)
Pop log entries from the queue and deal with them as appropriate.
Definition: LogEngine.cpp:59
Contains the DataWriter class definition.
Logger & getLogger(void)
Definition: Component.h:389
void testRunDelta(void)
Definition: ValueDetect_Test.h:41
static void Initialize()
Initializes the map.
Definition: BehaviorRegistry.cpp:15
static const Unit CELSIUS
Definition: Units.h:110
Dummy implementation of AsyncComponent for testing purposes.
Definition: TestAsyncComponent.h:19
void testRunNoDelta(void)
Definition: ValueDetect_Test.h:99
static Behavior * CreateBehavior(const Str &prefix, const Module *module)
Mission Component factory interface.
Definition: ValueDetect.cpp:321
Behavior * getComponent() const
Returns the mission component.
Definition: MissionItem.h:49
Contains the Slate class definition.