1# AltitudeTrigger unit tests
2#
3# Copyright (C) 2014 Anton Gomez Alvedro
4#
5# This program is free software; you can redistribute it and/or
6# modify it under the terms of the GNU General Public License as
7# published by the Free Software Foundation; either version 2 of the
8# License, or (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful, but
11# WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13# General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; if not, write to the Free Software
17# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
19io.include("Aircraft/Generic/Systems/Tests/test.nas");
20io.include("Aircraft/Generic/Systems/failures.nas");
21
22var TestAltitudeTrigger = {
23
24	parents: [TestSuite],
25
26	setup: func {
27		props.globals.initNode("/test");
28	},
29
30	cleanup: func {
31		me.trigger = nil;
32		props.globals.getNode("/test").remove();
33	},
34
35	test_binding: func {
36
37		setprop("/test/foreign-property", 25);
38
39		me.trigger = AltitudeTrigger.new(100, 200);
40		me.trigger.bind("/test/");
41
42		assert_prop_exists("/test/reset");
43		assert_prop_exists("/test/min-altitude-ft");
44		assert_prop_exists("/test/min-altitude-ft");
45
46		me.trigger.unbind();
47
48		fail_if_prop_exists("/test/reset");
49		fail_if_prop_exists("/test/min-altitude-ft");
50		fail_if_prop_exists("/test/min-altitude-ft");
51
52		assert_prop_exists("/test/foreign-property");
53	},
54
55	test_props_are_read_on_reset: func {
56
57		me.trigger = AltitudeTrigger.new(100, 200);
58		me.trigger.bind("/test/");
59
60		assert(me.trigger.params["min-altitude-ft"] == 100);
61		assert(me.trigger.params["max-altitude-ft"] == 200);
62
63		setprop("/test/min-altitude-ft", 1000);
64		setprop("/test/max-altitude-ft", 2000);
65
66		assert(me.trigger.params["min-altitude-ft"] == 100);
67		assert(me.trigger.params["max-altitude-ft"] == 200);
68
69		me.trigger.reset();
70
71		assert(me.trigger.params["min-altitude-ft"] == 1000);
72		assert(me.trigger.params["max-altitude-ft"] == 2000);
73	},
74
75	test_trigger_fires_within_min_and_max: func {
76
77		me.trigger = AltitudeTrigger.new(100, 200);
78
79		me.trigger._altitude_prop = "/test/fake-altitude-ft";
80		assert(!me.trigger.fired);
81
82		setprop("/test/fake-altitude-ft", 0);
83		assert(me.trigger.update() == 0);
84		assert(!me.trigger.fired);
85
86		setprop("/test/fake-altitude-ft", 300);
87		assert(me.trigger.update() == 0);
88		assert(!me.trigger.fired);
89
90		setprop("/test/fake-altitude-ft", 150);
91		assert(me.trigger.update() == 1);
92		assert(me.trigger.fired);
93	},
94
95	test_trigger_accepts_nil_max: func {
96
97		me.trigger = AltitudeTrigger.new(500, nil);
98		me.trigger._altitude_prop = "/test/fake-altitude-ft";
99		assert(!me.trigger.fired);
100
101		setprop("/test/fake-altitude-ft", -250);
102		assert(me.trigger.update() == 0);
103		assert(!me.trigger.fired);
104
105		setprop("/test/fake-altitude-ft", 0);
106		assert(me.trigger.update() == 0);
107		assert(!me.trigger.fired);
108
109		setprop("/test/fake-altitude-ft", 250);
110		assert(me.trigger.update() == 0);
111		assert(!me.trigger.fired);
112
113		setprop("/test/fake-altitude-ft", 750);
114		assert(me.trigger.update() == 1);
115		assert(me.trigger.fired);
116	},
117
118	test_trigger_accepts_nil_min: func {
119
120		me.trigger = AltitudeTrigger.new(nil, 500);
121		me.trigger._altitude_prop = "/test/fake-altitude-ft";
122		me.trigger.bind("/test/trigger/");
123
124		assert(!me.trigger.fired);
125
126		setprop("/test/fake-altitude-ft", 750);
127		assert(me.trigger.update() == 0);
128		assert(!me.trigger.fired);
129
130		setprop("/test/fake-altitude-ft", 500);
131		assert(me.trigger.update() == 0);
132		assert(!me.trigger.fired);
133
134		setprop("/test/fake-altitude-ft", 250);
135		assert(me.trigger.update() == 1);
136		assert(me.trigger.fired);
137
138		me.trigger.reset();
139
140		setprop("/test/fake-altitude-ft", -250);
141		assert(me.trigger.update() == 1);
142		assert(me.trigger.fired);
143	},
144
145	test_trigger_dies_if_both_params_are_nil: func {
146		call(AltitudeTrigger.new, [nil, nil], AltitudeTrigger, var err = []);
147		assert(size(err) > 0);
148	},
149
150	test_to_str: func {
151		me.trigger = AltitudeTrigger.new(100, 200);
152		call(me.trigger.to_str, [], me.trigger, var err = []);
153		assert(size(err) == 0);
154	}
155};
156