dmm_util 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,290 @@
1
+ require 'test_helper'
2
+
3
+ class IntegrationItest < Test::Unit::TestCase
4
+ include DMMTestHelper
5
+
6
+ def test_open
7
+ m = DmmUtil.open
8
+ assert m.driver.valid?
9
+ end
10
+
11
+ def test_id
12
+ @meter = DmmUtil::open_driver("/dev/tty.usbserial-A7004rWH")
13
+ res = @meter.id
14
+ assert_equal({:model_number=>"FLUKE 289",
15
+ :software_version=>"V1.10",
16
+ :serial_number=>"12540010"}, res)
17
+ end
18
+
19
+ def test_qemap
20
+ @meter = DmmUtil::open_driver("/dev/tty.usbserial-A7004rWH")
21
+ QEMAP.each do |key, val|
22
+ assert_equal(val, @meter.qemap(key))
23
+ end
24
+ end
25
+
26
+ def test_mpq_props
27
+ @meter = DmmUtil::open_driver("/dev/tty.usbserial-A7004rWH")
28
+ assert_sets_equal DmmUtil::Fluke28xDriver::MPQ_PROPS, @meter.qemap(:mpq_props).values.map{|val| val.downcase.to_sym}
29
+ end
30
+
31
+ def test_mp_props
32
+ @meter = DmmUtil::open_driver("/dev/tty.usbserial-A7004rWH")
33
+ assert_sets_equal DmmUtil::Fluke28xDriver::MP_PROPS.keys.map{|v|v.to_s}, @meter.qemap(:mp_props).values.map{|val| val.downcase}
34
+ DmmUtil::Fluke28xDriver::MP_PROPS.each do |key, val|
35
+ next unless val.is_a?(Array)
36
+ if val.first.is_a?(Integer)
37
+ real = @meter.qemap(key).values.map{|v| Integer(v)}
38
+ else
39
+ real = @meter.qemap(key).values.map{|v| v.downcase.to_sym}
40
+ end
41
+ assert_sets_equal val, real
42
+ end
43
+ end
44
+
45
+ # Time
46
+ # qdda/qddb query setting consistent
47
+ # Hitting backlight key / query backlight status
48
+
49
+ # def test_qdda
50
+ # result = @meter.meter_command("qdda")
51
+ # puts result.inspect
52
+ # end
53
+ #
54
+ # def test_qddb
55
+ # result = @meter.meter_command("qddb")
56
+ # puts hex(result)
57
+ # end
58
+
59
+ # def test_qsmr
60
+ # #saved meassurement
61
+ # result = @meter.meter_command("qsmr 0")
62
+ # puts "qsmr"
63
+ # puts hex(result)
64
+ # # 01 00 00 00 01 00 00 00 01 00 02 00 00 00 14 40 ...............@
65
+ # # 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
66
+ # # 04 00 00 00 01 00 02 00 34 EF C0 3F E5 61 A1 D6 ........4..?.a..
67
+ # # 02 00 00 00 04 00 05 00 02 00 00 00 25 F9 D2 41 ............%..A
68
+ # # 00 30 A0 A8 52 65 63 6F 72 64 69 6E 67 20 31 .0..Recording.1
69
+ # end
70
+ #
71
+ # def test_qmmsi
72
+ # #saved min/max
73
+ # result = @meter.meter_command("qmmsi 0")
74
+ # puts "qmmsi"
75
+ # puts hex(result)
76
+ # # 2B 00 00 00 2C F9 D2 41 00 40 3D 40 2C F9 D2 41 +...,..A.@=@,..A
77
+ # # 00 20 BA 46 01 00 00 00 01 00 02 00 00 00 14 40 ...F...........@
78
+ # # 00 00 00 00 00 00 01 00 2C F9 D2 41 00 40 3D 40 ........,..A.@=@
79
+ # # 10 00 00 00 04 00 02 00 7B F2 A0 3F 6E C5 FE B2 ........{..?n...
80
+ # # 02 00 00 00 04 00 05 00 02 00 00 00 2C F9 D2 41 ............,..A
81
+ # # 00 20 BA 46 07 00 76 4F 9E 3F AC AD D8 5F 02 00 ...F..vO.?..._..
82
+ # # 00 00 04 00 05 00 02 00 00 00 2C F9 D2 41 00 00 ..........,..A..
83
+ # # 8F 43 08 00 F2 1F A2 3F 72 8A 8E E4 02 00 00 00 .C.....?r.......
84
+ # # 04 00 05 00 02 00 00 00 2C F9 D2 41 00 90 BD 44 ........,..A...D
85
+ # # 09 00 A0 89 A0 3F 61 54 52 27 02 00 00 00 04 00 .....?aTR'......
86
+ # # 05 00 02 00 00 00 2C F9 D2 41 00 20 BA 46 43 69 ......,..A...FCi
87
+ # # 72 63 75 69 74 20 31 rcuit.1
88
+ # end
89
+ #
90
+ # def test_qpsi
91
+ # #saved peak
92
+ # result = @meter.meter_command("qpsi 0")
93
+ # puts "qpsi"
94
+ # puts hex(result)
95
+ # # 2C 00 00 00 2C F9 D2 41 00 60 A1 79 2C F9 D2 41 ,...,..A.`.y,..A
96
+ # # 00 60 11 7A 01 00 09 00 01 00 02 00 00 00 14 40 .`.z...........@
97
+ # # 00 00 00 00 00 00 01 00 2C F9 D2 41 00 60 A1 79 ........,..A.`.y
98
+ # # 10 00 00 00 04 00 02 00 72 68 A1 3F 9C C4 20 B0 ........rh.?....
99
+ # # 02 00 00 00 03 00 05 00 02 00 00 00 2C F9 D2 41 ............,..A
100
+ # # 00 60 11 7A 07 00 45 B6 B3 BF 83 C0 CA A1 04 00 .`.z..E.........
101
+ # # 00 00 03 00 05 00 02 00 00 00 2C F9 D2 41 00 70 ..........,..A.p
102
+ # # B1 79 08 00 C0 CA C1 3F 98 6E 12 83 04 00 00 00 .y.....?.n......
103
+ # # 03 00 05 00 02 00 00 00 2C F9 D2 41 00 60 A1 79 ........,..A.`.y
104
+ # # 09 00 72 68 A1 3F 9C C4 20 B0 02 00 00 00 03 00 ..rh.?..........
105
+ # # 05 00 02 00 00 00 2C F9 D2 41 00 60 11 7A 43 69 ......,..A.`.zCi
106
+ # # 72 63 75 69 74 20 32 rcuit.2
107
+ # endx
108
+ #
109
+ # def test_qrsi
110
+ # # Recorded session info / header
111
+ # result = @meter.meter_command("qrsi 0")
112
+ # puts "qrsi"
113
+ # puts hex(result)
114
+ # # 06 00 00 00 26 F9 D2 41 00 00 D4 30 26 F9 D2 41 ....&..A...0&..A
115
+ # # 00 B0 CB 33 00 20 8C 40 00 00 00 00 E1 7A A4 3F ...3...@.....z.?
116
+ # # 7B 14 AE 47 07 00 00 00 02 00 00 00 01 00 00 00 {..G............
117
+ # # 01 00 02 00 00 00 14 40 00 00 00 00 00 00 01 00 .......@........
118
+ # # 00 00 00 00 00 00 00 00 20 00 00 00 01 00 02 00 ................
119
+ # # D7 12 A2 3F 51 FC 18 73 02 00 00 00 04 00 05 00 ...?Q..s........
120
+ # # 02 00 00 00 26 F9 D2 41 00 B0 CB 33 42 61 74 74 ....&..A...3Batt
121
+ # # 65 72 79 20 31 ery.1
122
+ # end
123
+ #
124
+ # def test_qsrr
125
+ # # Recorded session record/sample
126
+ # puts "qsrr"
127
+ # result = @meter.meter_command("qsrr 7,0")
128
+ # puts hex(result)
129
+ # # 26 F9 D2 41 00 00 D4 30 26 F9 D2 41 00 B0 CB 33 &..A...0&..A...3
130
+ # # 08 00 CE 88 A2 3F 7F FB 3A 70 02 00 00 00 04 00 .....?..:p......
131
+ # # 05 00 02 00 00 00 26 F9 D2 41 00 10 01 31 07 00 ......&..A...1..
132
+ # # 4E D1 A1 3F A9 35 CD 3B 02 00 00 00 04 00 05 00 N..?.5.;........
133
+ # # 02 00 00 00 26 F9 D2 41 00 60 14 31 09 00 55 B0 ....&..A.`.1..U.
134
+ # # 10 40 1C 7C 61 32 02 00 00 00 04 00 05 00 02 00 .@.|a2..........
135
+ # # 00 00 26 F9 D2 41 00 00 D4 30 76 00 00 00 02 00 ..&..A...0v.....
136
+ # # F2 1F A2 3F 72 8A 8E E4 02 00 00 00 04 00 05 00 ...?r...........
137
+ # # 02 00 00 00 26 F9 D2 41 00 00 D4 30 00 00 01 00 ....&..A...0....
138
+ # # 00 00 ..
139
+ # end
140
+ #
141
+ #
142
+ #
143
+ # def xtest_other_maps
144
+ # @meter.qemap(:fileMode)
145
+ # @meter.qemap(:beeperTestState)
146
+ # @meter.qemap(:sessionType)
147
+ # @meter.qemap(:calStatus)
148
+ # @meter.qemap(:mode)
149
+ # @meter.qemap(:readingID)
150
+ # @meter.qemap(:attribute)
151
+ # @meter.qemap(:jackName)
152
+ # @meter.qemap(:jackPositionStatus)
153
+ # @meter.qemap(:testPattern)
154
+ # @meter.qemap(:lcdModeState)
155
+ # @meter.qemap(:ledState)
156
+ # @meter.qemap(:mp_props)
157
+ # @meter.qemap(:mpdev_props)
158
+ # @meter.qemap(:mpq_props)
159
+ # @meter.qemap(:memSize)
160
+ # @meter.qemap(:powerMode)
161
+ # @meter.qemap(:buttonName)
162
+ # @meter.qemap(:presstype)
163
+ # @meter.qemap(:channel)
164
+ # @meter.qemap(:sampleTime)
165
+ # @meter.qemap(:recordType)
166
+ # @meter.qemap(:isStableFlag)
167
+ # @meter.qemap(:transientState)
168
+ # @meter.qemap(:xaJackName)
169
+ # end
170
+ #
171
+ # def xtest_other_maps2
172
+ # @meter.qemap(:rsob)
173
+ # @meter.qemap(:blightVals)
174
+ # @meter.qemap(:blVals)
175
+ # @meter.qemap(:memVals)
176
+ # @meter.qemap(:primFunction)
177
+ # @meter.qemap(:secFunction)
178
+ # @meter.qemap(:MODE)
179
+ # @meter.qemap(:jackDetect)
180
+ # @meter.qemap(:updateMode)
181
+ # @meter.qemap(:acSmooth)
182
+ # @meter.qemap(:SI)
183
+ # @meter.qemap(:tempUnit)
184
+ # @meter.qemap(:dBmRef)
185
+ # @meter.qemap(:pwPol)
186
+ # @meter.qemap(:hzEdge)
187
+ # @meter.qemap(:dcPol)
188
+ # @meter.qemap(:contBeep)
189
+ # @meter.qemap(:contBeepOS)
190
+ # @meter.qemap(:timeFmt)
191
+ # @meter.qemap(:numFmt)
192
+ # @meter.qemap(:lang)
193
+ # @meter.qemap(:dateFmt)
194
+ # @meter.qemap(:recEventTh)
195
+ # @meter.qemap(:rsm)
196
+ # @meter.qemap(:ablto)
197
+ # @meter.qemap(:digits)
198
+ # @meter.qemap(:beeper)
199
+ # @meter.qemap(:apoffto)
200
+ # @meter.qemap(:UNIT)
201
+ # @meter.qemap(:ATTRIBUTE)
202
+ # @meter.qemap(:STATE)
203
+ # @meter.qemap(:autoRange)
204
+ # @meter.qemap(:unit)
205
+ # @meter.qemap(:bolt)
206
+ # end
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+ #"Map fileMode: {0=>\"READ\", 1=>\"APPEND\", 2=>\"TRUNCATE\"}"
217
+ #"Map beeperTestState: {0=>\"OFF\", 1=>\"ON\"}"
218
+ #"Map sessionType: {0=>\"ALL\", 1=>\"RECORDED\", 2=>\"MIN_MAX\", 3=>\"PEAK\", 4=>\"MEASUREMENT\"}"
219
+ #"Map calStatus: {5=>\"CAL_COMPLETE\", 0=>\"INACTIVE\", 1=>\"WAITING\", 2=>\"CALIBRATING\", 3=>\"INVALID_ROTARY_SWITCH\"}"
220
+ #"Map mode: {16=>\"MIN_MAX_AVG\", 0=>\"NONE\", 1=>\"AUTO_HOLD\", 128=>\"REL_PERCENT\", 2=>\"AUTO_SAVE\", 8=>\"LOW_PASS_FILTER\", 256=>\"CALIBRATION\", 64=>\"REL\", 4=>\"HOLD\", 32=>\"RECORD\"}"
221
+ #"Map readingID: {5=>\"BARGRAPH\", 11=>\"REL_REFERENCE\", 12=>\"DB_REF\", 1=>\"LIVE\", 7=>\"MINIMUM\", 13=>\"TEMP_OFFSET\", 2=>\"PRIMARY\", 8=>\"MAXIMUM\", 3=>\"SECONDARY\", 9=>\"AVERAGE\", 4=>\"REL_LIVE\"}"
222
+ #"Map attribute: {5=>\"LO_OHMS\", 0=>\"NONE\", 6=>\"NEGATIVE_EDGE\", 1=>\"OPEN_CIRCUIT\", 7=>\"POSITIVE_EDGE\", 2=>\"SHORT_CIRCUIT\", 8=>\"HIGH_CURRENT\", 3=>\"GLITCH_CIRCUIT\", 4=>\"GOOD_DIODE\"}"
223
+ #"Map jackName: {0=>\"AMPS\", 1=>\"m_uAMPS\"}"
224
+ #"Map jackPositionStatus: {0=>\"IN\", 1=>\"OUT\"}"
225
+ #"Map testPattern: {5=>\"HORIZ_LINES\", 0=>\"OFF\", 6=>\"VERT_LINES\", 1=>\"BLANK\", 7=>\"HORIZ_LINES_OFFSET\", 2=>\"BOX\", 8=>\"VERT_LINES_OFFSET\", 3=>\"SOLID\", 4=>\"CONTRAST\"}"
226
+ #"Map lcdModeState: {0=>\"ON\", 1=>\"OFF\"}"
227
+ #"Map ledState: {0=>\"ON\", 1=>\"OFF\"}"
228
+ #"Map mp_props: {16=>\"dcPol\", 5=>\"rsm\", 22=>\"SI\", 11=>\"lang\", 0=>\"apoffto\", 17=>\"hzEdge\", 6=>\"lcdCont\", 23=>\"acSmooth\", 12=>\"numFmt\", 1=>\"beeper\", 18=>\"pwPol\", 7=>\"ahEventTh\", 13=>\"timeFmt\", 2=>\"cusDBm\", 19=>\"dBmRef\", 8=>\"recEventTh\", 14=>\"contBeepOS\", 3=>\"digits\", 20=>\"tempOS\", 9=>\"Clock\", 15=>\"contBeep\", 4=>\"ablto\", 21=>\"tempUnit\", 10=>\"dateFmt\"}"
229
+ #"Map mpdev_props: {0=>\"ablto\", 1=>\"apoffto\", 2=>\"recEventTh\"}"
230
+ #"Map mpq_props: {0=>\"COMPANY\", 1=>\"CONTACT\", 2=>\"OPERATOR\", 3=>\"SITE\"}"
231
+ #"Map memSize: {1=>\"1\", 2=>\"2\", 4=>\"4\"}"
232
+ #"Map powerMode: {0=>\"ON\", 1=>\"BATTERY_SAVER\", 2=>\"OFF\", 3=>\"OFF_WITH_WAKEUP\", 4=>\"RESTART\"}"
233
+ #"Map buttonName: {654=>\"HOLD\", 660=>\"ONOFF\", 655=>\"MINMAX\", 650=>\"F1\", 606=>\"UP\", 656=>\"RANGE\", 651=>\"F2\", 607=>\"DOWN\", 657=>\"INFO\", 652=>\"F3\", 608=>\"LEFT\", 658=>\"BACKLIGHT\", 653=>\"F4\", 609=>\"RIGHT\"}"
234
+ #"Map presstype: {0=>\"PRESSED\", 1=>\"HELD_DOWN\", 2=>\"RELEASED\", 3=>\"REPEATED\"}"
235
+ #"Map channel: {5=>\"5\", 0=>\"0\", 6=>\"6\", 1=>\"1\", 7=>\"7\", 2=>\"2\", 3=>\"3\", 4=>\"4\"}"
236
+ #"Map sampleTime: {5=>\"5\", 11=>\"11\", 0=>\"0\", 6=>\"6\", 12=>\"12\", 1=>\"1\", 7=>\"7\", 13=>\"13\", 2=>\"2\", 8=>\"8\", 14=>\"14\", 3=>\"3\", 9=>\"9\", 15=>\"15\", 4=>\"4\", 10=>\"10\"}"
237
+ #"Map recordType: {0=>\"INPUT\", 1=>\"INTERVAL\"}"
238
+ #"Map isStableFlag: {0=>\"UNSTABLE\", 1=>\"STABLE\"}"
239
+ #"Map transientState: {0=>\"NON_T\", 1=>\"RANGE_UP\", 2=>\"RANGE_DOWN\", 3=>\"OVERLOAD\", 4=>\"OPEN_TC\"}"
240
+ #"Map xaJackName: {5=>\"JACK\", 0=>\"AMPS\", 1=>\"m_uAMPS\", 2=>\"BOTH\", 3=>\"NONE\", 4=>\"IGNORE\"}"
241
+
242
+
243
+ ## Can be set?
244
+ #"Map rsob: {5=>\"4\", 11=>\"NUM\", 0=>\"LIMBO\", 6=>\"5\", 12=>\"INVALID\", 1=>\"0\", 7=>\"6\", 2=>\"1\", 8=>\"7\", 3=>\"2\", 9=>\"8\", 4=>\"3\", 10=>\"9\"}"
245
+ #"Map blightVals: {1=>\"OFF\", 2=>\"LOW\", 3=>\"HIGH\"}"
246
+ #"Map blVals: {5=>\"PARTLY_EMPTY_3\", 6=>\"FULL\", 1=>\"EMPTY\", 2=>\"ALMOST_EMPTY\", 3=>\"PARTLY_EMPTY_1\", 4=>\"PARTLY_EMPTY_2\"}"
247
+ #"Map memVals: {0=>\"EXHAUSTED\", 1=>\"SEVERE\", 2=>\"WARNING\", 3=>\"OK\"}"
248
+ #"Map primFunction: {38=>\"CAL_FILT_AMP\", 27=>\"OHMS\", 16=>\"UA_DC\", 5=>\"V_AC_OVER_DC\", 44=>\"CAL_ACDC_AC_COMP\", 33=>\"OHMS_LOW\", 22=>\"MA_AC_PLUS_DC\", 11=>\"A_AC\", 0=>\"LIMBO\", 39=>\"CAL_DC_AMP_X5\", 28=>\"CONDUCTANCE\", 17=>\"A_AC_OVER_DC\", 6=>\"V_DC_OVER_AC\", 45=>\"CAL_V_AC_LOZ\", 34=>\"CAL_V_DC_LOZ\", 23=>\"UA_AC_OVER_DC\", 12=>\"MA_AC\", 1=>\"V_AC\", 40=>\"CAL_DC_AMP_X10\", 29=>\"CONTINUITY\", 18=>\"A_DC_OVER_AC\", 7=>\"V_AC_PLUS_DC\", 46=>\"CAL_V_AC_PEAK\", 35=>\"CAL_AD_GAIN_X2\", 24=>\"UA_DC_OVER_AC\", 13=>\"UA_AC\", 2=>\"MV_AC\", 41=>\"CAL_NINV_AC_AMP\", 30=>\"CAPACITANCE\", 19=>\"A_AC_PLUS_DC\", 8=>\"MV_AC_OVER_DC\", 47=>\"CAL_MV_AC_PEAK\", 36=>\"CAL_AD_GAIN_X1\", 25=>\"UA_AC_PLUS_DC\", 14=>\"A_DC\", 3=>\"V_DC\", 42=>\"CAL_ISRC_500NA\", 31=>\"DIODE_TEST\", 20=>\"MA_AC_OVER_DC\", 9=>\"MV_DC_OVER_AC\", 48=>\"CAL_TEMPERATURE\", 37=>\"CAL_RMS\", 26=>\"TEMPERATURE\", 15=>\"MA_DC\", 4=>\"MV_DC\", 43=>\"CAL_COMP_TRIM_MV_DC\", 32=>\"V_AC_LOZ\", 21=>\"MA_DC_OVER_AC\", 10=>\"MV_AC_PLUS_DC\"}"
249
+ #"Map secFunction: {5=>\"DBV\", 0=>\"NONE\", 6=>\"DBM_HERTZ\", 1=>\"HERTZ\", 7=>\"DBV_HERTZ\", 2=>\"DUTY_CYCLE\", 8=>\"CREST_FACTOR\", 3=>\"PULSE_WIDTH\", 9=>\"PEAK_MIN_MAX\", 4=>\"DBM\"}"
250
+ #"Map MODE: {16=>\"MIN_MAX_AVG\", 0=>\"NONE\", 1=>\"AUTO_HOLD\", 128=>\"REL_PERCENT\", 2=>\"AUTO_SAVE\", 8=>\"LOW_PASS_FILTER\", 256=>\"CALIBRATION\", 64=>\"REL\", 4=>\"HOLD\", 32=>\"RECORD\"}"
251
+ #"Map jackDetect: {1=>\"OK\", 2=>\"ATTENTION\", 3=>\"WARNING\"}"
252
+ #"Map updateMode: {0=>\"DISABLED\", 1=>\"ENABLED_UNLOCKED\", 2=>\"ENABLED_LOCKED\", 3=>\"RETURNED_TO_ORIGINAL\", 4=>\"SUCCESSFUL\"}"
253
+ #"Map acSmooth: {0=>\"OFF\", 1=>\"ON\"}"
254
+ #"Map SI: {0=>\"OFF\", 1=>\"ON\"}"
255
+ #"Map tempUnit: {0=>\"C\", 1=>\"F\"}"
256
+ #"Map dBmRef: {16=>\"16\", 0=>\"0\", 600=>\"600\", 50=>\"50\", 8=>\"8\", 25=>\"25\", 75=>\"75\", 4=>\"4\", 1000=>\"1000\", 32=>\"32\"}"
257
+ #"Map pwPol: {0=>\"POS\", 1=>\"NEG\"}"
258
+ #"Map hzEdge: {0=>\"RISING\", 1=>\"FALLING\"}"
259
+ #"Map dcPol: {0=>\"POS\", 1=>\"NEG\"}"
260
+ #"Map contBeep: {0=>\"OFF\", 1=>\"ON\"}"
261
+ #"Map contBeepOS: {0=>\"SHORT\", 1=>\"OPEN\"}"
262
+ #"Map timeFmt: {0=>\"12\", 1=>\"24\"}"
263
+ #"Map numFmt: {0=>\"POINT\", 1=>\"COMMA\"}"
264
+ #"Map lang: {5=>\"JAPANESE\", 0=>\"ENGLISH\", 6=>\"CHINESE\", 1=>\"GERMAN\", 2=>\"FRENCH\", 3=>\"SPANISH\", 4=>\"ITALIAN\"}"
265
+ #"Map dateFmt: {0=>\"MM_DD\", 1=>\"DD_MM\"}"
266
+ #"Map recEventTh: {5=>\"5\", 0=>\"0\", 1=>\"1\", 25=>\"25\", 20=>\"20\", 15=>\"15\", 4=>\"4\", 10=>\"10\"}"
267
+ #"Map rsm: {0=>\"OFF\", 1=>\"ON\"}"
268
+ #"Map ablto: {0=>\"0\", 600=>\"600\", 1200=>\"1200\", 1800=>\"1800\", 300=>\"300\", 900=>\"900\", 1500=>\"1500\"}"
269
+ #"Map digits: {5=>\"5\", 4=>\"4\"}"
270
+ #"Map beeper: {0=>\"OFF\", 1=>\"ON\"}"
271
+ #"Map apoffto: {2700=>\"2700\", 0=>\"0\", 3600=>\"3600\", 900=>\"900\", 1500=>\"1500\", 2100=>\"2100\"}"
272
+
273
+ #"Map UNIT: {16=>\"PCT\", 5=>\"ADC\", 11=>\"Hz\", 0=>\"NONE\", 17=>\"dB\", 6=>\"AAC\", 12=>\"S\", 1=>\"VDC\", 18=>\"dBV\", 7=>\"AAC_PLUS_DC\", 13=>\"F\", 2=>\"VAC\", 19=>\"dBm\", 8=>\"A\", 14=>\"CEL\", 3=>\"VAC_PLUS_DC\", 20=>\"CREST_FACTOR\", 9=>\"OHM\", 15=>\"FAR\", 4=>\"V\", 10=>\"SIE\"}"
274
+ #"Map ATTRIBUTE: {5=>\"LO_OHMS\", 0=>\"NONE\", 6=>\"NEGATIVE_EDGE\", 1=>\"OPEN_CIRCUIT\", 7=>\"POSITIVE_EDGE\", 2=>\"SHORT_CIRCUIT\", 8=>\"HIGH_CURRENT\", 3=>\"GLITCH_CIRCUIT\", 4=>\"GOOD_DIODE\"}"
275
+ #"Map STATE: {5=>\"OL\", 0=>\"INACTIVE\", 6=>\"OL_MINUS\", 1=>\"INVALID\", 7=>\"OPEN_TC\", 2=>\"NORMAL\", 3=>\"BLANK\", 4=>\"DISCHARGE\"}"
276
+ #"Map autoRange: {0=>\"MANUAL\", 1=>\"AUTO\"}"
277
+ #"Map unit: {16=>\"PCT\", 5=>\"ADC\", 11=>\"Hz\", 0=>\"NONE\", 17=>\"dB\", 6=>\"AAC\", 12=>\"S\", 1=>\"VDC\", 18=>\"dBV\", 7=>\"AAC_PLUS_DC\", 13=>\"F\", 2=>\"VAC\", 19=>\"dBm\", 8=>\"A\", 14=>\"CEL\", 3=>\"VAC_PLUS_DC\", 20=>\"CREST_FACTOR\", 9=>\"OHM\", 15=>\"FAR\", 4=>\"V\", 10=>\"SIE\"}"
278
+ #"Map bolt: {0=>\"OFF\", 1=>\"ON\"}"
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+ end
@@ -0,0 +1,57 @@
1
+ require 'test_helper'
2
+
3
+
4
+ class MeasurementTest < Test::Unit::TestCase
5
+ include DMMTestHelper
6
+
7
+ def test_basic_getters
8
+ measurement = DmmUtil::Measurement.new(:name=>"This Was Saved", :prim_function => "VAC",
9
+ :ts=>Time.parse("Fri May 07 22:48:36.0166 2010"))
10
+ assert_equal "This Was Saved", measurement.name
11
+ assert_equal "VAC", measurement.prim_function
12
+ assert_equal Time.parse("Fri May 07 22:48:36.0166 2010"), measurement.ts
13
+
14
+ measurement = DmmUtil::Measurement.new(:prim_function => "VDC",
15
+ :readings => {
16
+ "PRIMARY" => {:ts=>Time.parse("Fri May 07 22:48:36.0166 2011")}
17
+ })
18
+ assert_equal Time.parse("Fri May 07 22:48:36.0166 2011"), measurement.ts
19
+ end
20
+
21
+ def test_reading_names
22
+ measurement = DmmUtil::Measurement.new(:readings => {
23
+ "PRIMARY" => {},
24
+ "MAXIMUM" => {},
25
+ "MINIMUM" => {}
26
+ })
27
+
28
+ assert_sets_equal [:primary, :maximum, :minimum], measurement.reading_names
29
+ end
30
+
31
+ def test_to_s
32
+ measurement = DmmUtil::Measurement.new(:readings => {
33
+ "PRIMARY" => {:value=>0.0362, :unit => "VAC",
34
+ :unit_multiplier=>0, :decimals => 4, :state=>"NORMAL"},
35
+ "SECONDARY" => {:value => 1.03e-06, :unit => "AAC",
36
+ :unit_multiplier => -6, :decimals => 2, :state=>"NORMAL"},
37
+ "LIVE" => {:value => 9.99999999e+37, :unit => "OHM",
38
+ :unit_multiplier => 6, :decimals => 1, :state=>"OL"}
39
+ })
40
+
41
+ expected = "0.0362 VAC (secondary: 1.03 uAAC, live: OL MOHM)"
42
+ assert_equal expected, measurement.to_s
43
+ end
44
+
45
+ def test_to_s__live_is_same_as_primary
46
+ measurement = DmmUtil::Measurement.new(:readings => {
47
+ "PRIMARY" => {:value=>0.0362, :unit => "VAC",
48
+ :unit_multiplier=>0, :decimals => 4, :state=>"NORMAL"},
49
+ "LIVE" => {:value=>0.0362, :unit => "VAC",
50
+ :unit_multiplier=>0, :decimals => 4, :state=>"NORMAL"}
51
+ })
52
+
53
+ expected = "0.0362 VAC"
54
+ assert_equal expected, measurement.to_s
55
+ end
56
+
57
+ end
@@ -0,0 +1,178 @@
1
+ require 'test_helper'
2
+
3
+
4
+ class MeterTest < Test::Unit::TestCase
5
+ include DMMTestHelper
6
+
7
+ def setup
8
+ @driver_mock = mock()
9
+ @meter = DmmUtil::Meter.new(@driver_mock)
10
+ end
11
+
12
+ def test_recordings_each
13
+ @driver_mock.expects(:qsls).returns({:recording => 2})
14
+ @driver_mock.expects(:qrsi).with(0).returns({:name => "Recording1"})
15
+ @driver_mock.expects(:qrsi).with(1).returns({:name => "Recording2"})
16
+
17
+ res = []
18
+ @meter.recordings.each do |val|
19
+ res << val.name
20
+ end
21
+
22
+ assert_equal ["Recording1", "Recording2"], res
23
+ end
24
+
25
+ def test_recordings_count
26
+ @driver_mock.expects(:qsls).returns({:recording => 3})
27
+ assert_equal 3, @meter.recordings.count
28
+ end
29
+
30
+ def test_recordings_index
31
+ @driver_mock.expects(:qrsi).with(1).returns({:name => "Recording2"})
32
+ assert_equal "Recording2", @meter.recordings[1].name
33
+ end
34
+
35
+ def test_recordings_find_from_enumerable
36
+ @driver_mock.expects(:qsls).returns({:recording => 4})
37
+ @driver_mock.expects(:qrsi).with(0).returns({:name => "Recording1"})
38
+ @driver_mock.expects(:qrsi).with(1).returns({:name => "Recording2"})
39
+
40
+ rec = @meter.recordings.find{|r| r.name == "Recording2" }
41
+ assert_equal "Recording2", rec.name
42
+ end
43
+
44
+ def test_saved_measurements_each
45
+ @driver_mock.expects(:qsls).returns({:measurement => 2})
46
+ @driver_mock.expects(:qsmr).with(0).returns({:name => "Measurement1"})
47
+ @driver_mock.expects(:qsmr).with(1).returns({:name => "Measurement2"})
48
+
49
+ res = []
50
+ @meter.saved_measurements.each do |val|
51
+ res << val.name
52
+ end
53
+
54
+ assert_equal ["Measurement1", "Measurement2"], res
55
+ end
56
+
57
+ def test_saved_measurements_count
58
+ @driver_mock.expects(:qsls).returns({:measurement => 4})
59
+ assert_equal 4, @meter.saved_measurements.count
60
+ end
61
+
62
+ def test_saved_measurements_index
63
+ @driver_mock.expects(:qsmr).with(1).returns({
64
+ :name => "Measurement2",
65
+ :readings => {"PRIMARY"=> {:value => 6.66}}
66
+ })
67
+ m = @meter.saved_measurements[1]
68
+ assert_equal "Measurement2", m.name
69
+ assert_equal 6.66, m.primary.value
70
+ end
71
+
72
+ def test_saved_measurements_find_from_enumerable
73
+ @driver_mock.expects(:qsls).returns({:measurement => 4})
74
+ @driver_mock.expects(:qsmr).with(0).returns({:name => "Measurement1"})
75
+ @driver_mock.expects(:qsmr).with(1).returns({:name => "Measurement2"})
76
+
77
+ m = @meter.saved_measurements.find{|m| m.name == "Measurement2" }
78
+ assert_equal "Measurement2", m.name
79
+ end
80
+
81
+ def test_saved_min_max_each
82
+ @driver_mock.expects(:qsls).returns({:min_max => 2})
83
+ @driver_mock.expects(:qmmsi).with(0).returns({:name => "Measurement1"})
84
+ @driver_mock.expects(:qmmsi).with(1).returns({:name => "Measurement2"})
85
+
86
+ res = []
87
+ @meter.saved_min_max.each do |val|
88
+ res << val.name
89
+ end
90
+
91
+ assert_equal ["Measurement1", "Measurement2"], res
92
+ end
93
+
94
+ def test_saved_min_max_count
95
+ @driver_mock.expects(:qsls).returns({:min_max => 4})
96
+ assert_equal 4, @meter.saved_min_max.count
97
+ end
98
+
99
+ def test_saved_min_max_index
100
+ @driver_mock.expects(:qmmsi).with(1).returns({
101
+ :name => "Measurement2",
102
+ :readings => {"PRIMARY"=> {:value => 6.66}}
103
+ })
104
+ m = @meter.saved_min_max[1]
105
+ assert_equal "Measurement2", m.name
106
+ assert_equal 6.66, m.primary.value
107
+ end
108
+
109
+ def test_saved_min_max_find_from_enumerable
110
+ @driver_mock.expects(:qsls).returns({:min_max => 4})
111
+ @driver_mock.expects(:qmmsi).with(0).returns({:name => "Measurement1"})
112
+ @driver_mock.expects(:qmmsi).with(1).returns({:name => "Measurement2"})
113
+
114
+ m = @meter.saved_min_max.find{|m| m.name == "Measurement2" }
115
+ assert_equal "Measurement2", m.name
116
+ end
117
+
118
+ def test_saved_peak_each
119
+ @driver_mock.expects(:qsls).returns({:peak => 2})
120
+ @driver_mock.expects(:qpsi).with(0).returns({:name => "Measurement1"})
121
+ @driver_mock.expects(:qpsi).with(1).returns({:name => "Measurement2"})
122
+
123
+ res = []
124
+ @meter.saved_peak.each do |val|
125
+ res << val.name
126
+ end
127
+
128
+ assert_equal ["Measurement1", "Measurement2"], res
129
+ end
130
+
131
+ def test_saved_peak_count
132
+ @driver_mock.expects(:qsls).returns({:peak => 4})
133
+ assert_equal 4, @meter.saved_peak.count
134
+ end
135
+
136
+ def test_saved_peak_index
137
+ @driver_mock.expects(:qpsi).with(1).returns({
138
+ :name => "Measurement2",
139
+ :readings => {"PRIMARY"=> {:value => 6.66}}
140
+ })
141
+ m = @meter.saved_peak[1]
142
+ assert_equal "Measurement2", m.name
143
+ assert_equal 6.66, m.primary.value
144
+ end
145
+
146
+ def test_saved_peak_find_from_enumerable
147
+ @driver_mock.expects(:qsls).returns({:peak => 4})
148
+ @driver_mock.expects(:qpsi).with(0).returns({:name => "Measurement1"})
149
+ @driver_mock.expects(:qpsi).with(1).returns({:name => "Measurement2"})
150
+
151
+ m = @meter.saved_peak.find{|m| m.name == "Measurement2" }
152
+ assert_equal "Measurement2", m.name
153
+ end
154
+
155
+ def test_measure_now
156
+ @driver_mock.expects(:qddb).returns({
157
+ :prim_function => "V_DC",
158
+ :sec_function => "NONE",
159
+ :mode => ["MIN_MAX_AVG", "REL"],
160
+ :auto_range => "MANUAL",
161
+ :range_max => 5,
162
+ :readings => {
163
+ "PRIMARY"=> {:decimals=>4, :unit_multiplier=>0,
164
+ :state=>"NORMAL", :ts => Time.parse("Sat May 15 13:14:48.54199 2010"),
165
+ :un1 => 5, :attribute => "NONE", :value=>-1.5821, :unit=>"VDC"},
166
+ "MAXIMUM"=> {:decimals=>4, :unit_multiplier=>0,
167
+ :state=>"NORMAL", :ts => Time.parse("Sat May 15 13:14:35.26465 2010"),
168
+ :un1 => 5, :attribute => "NONE", :value=>-1.5352, :unit=>"VDC"}
169
+ }
170
+ })
171
+
172
+ m = @meter.measure_now
173
+ assert_equal "V_DC", m.prim_function
174
+ assert_equal Time.parse("Sat May 15 13:14:35.26465 2010"), m.maximum.ts
175
+ assert_equal -1.5821, m.primary.value
176
+ end
177
+
178
+ end
@@ -0,0 +1,48 @@
1
+ require 'test_helper'
2
+
3
+
4
+ class ReadingTest < Test::Unit::TestCase
5
+ include DMMTestHelper
6
+
7
+ def test_basic_getters
8
+ reading = DmmUtil::Reading.new(:value=>0.0362, :unit => "VAC",
9
+ :ts=>Time.parse("Fri May 07 22:48:36.0166 2010"))
10
+ assert_equal 0.0362, reading.value
11
+ assert_equal "VAC", reading.unit
12
+ assert_equal Time.parse("Fri May 07 22:48:36.0166 2010"), reading.ts
13
+ end
14
+
15
+ def test_to_s
16
+ reading = DmmUtil::Reading.new({})
17
+ reading.expects(:scaled_value).returns(["foo", "bar"])
18
+ assert_equal "foo bar", reading.to_s
19
+ end
20
+
21
+ def test_scaled_value
22
+ reading = DmmUtil::Reading.new(:value=>0.0362, :unit => "VAC",
23
+ :unit_multiplier=>0, :decimals => 4, :state=>"NORMAL")
24
+
25
+ assert_equal ["0.0362", "VAC"], reading.scaled_value
26
+
27
+ reading = DmmUtil::Reading.new(:value => 1.1e-05, :unit => "VDC",
28
+ :unit_multiplier => -3, :decimals => 3, :state=>"NORMAL")
29
+ assert_equal ["0.011", "mVDC"], reading.scaled_value
30
+
31
+ reading = DmmUtil::Reading.new(:value => 1135700.0, :unit => "OHM",
32
+ :unit_multiplier => 6, :decimals => 4, :state=>"NORMAL")
33
+ assert_equal ["1.1357", "MOHM"], reading.scaled_value
34
+
35
+ reading = DmmUtil::Reading.new(:value => 1.03e-06, :unit => "AAC",
36
+ :unit_multiplier => -6, :decimals => 2, :state=>"NORMAL")
37
+ assert_equal ["1.03", "uAAC"], reading.scaled_value
38
+
39
+ reading = DmmUtil::Reading.new(:value => 9.99999999e+37, :unit => "OHM",
40
+ :unit_multiplier => 6, :decimals => 1, :state=>"OL")
41
+ assert_equal ["OL", "MOHM"], reading.scaled_value
42
+
43
+ reading = DmmUtil::Reading.new(:value=>9.99999999e+37, :unit=>"VDC",
44
+ :unit_multiplier=>-3, :decimals=>2, :state=>"OL_MINUS")
45
+ assert_equal ["-OL", "mVDC"], reading.scaled_value
46
+ end
47
+
48
+ end
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+
3
+
4
+ class RecordingMeasurementTest < Test::Unit::TestCase
5
+ include DMMTestHelper
6
+
7
+ def test_basic_getters
8
+ measurement = DmmUtil::RecordingMeasurement.new(:start_ts=>Time.parse("Fri May 07 22:48:36.0166 2010"),
9
+ :end_ts=>Time.parse("Sat May 07 22:48:36.0166 2011")
10
+ )
11
+
12
+ assert_equal Time.parse("Fri May 07 22:48:36.0166 2010"), measurement.start_ts
13
+ assert_equal Time.parse("Sat May 07 22:48:36.0166 2011"), measurement.end_ts
14
+ end
15
+
16
+ def test_reading_names
17
+ measurement = DmmUtil::RecordingMeasurement.new(:readings => {
18
+ "MAXIMUM" => {},
19
+ "MINIMUM" => {}
20
+ }, :readings2 => {"PRIMARY" => {}})
21
+
22
+ assert_sets_equal [:primary, :maximum, :minimum], measurement.reading_names
23
+ end
24
+
25
+ def test_to_s
26
+ measurement = DmmUtil::RecordingMeasurement.new(:readings2 => {
27
+ "PRIMARY" => {:value=>0.0362, :unit => "VAC",
28
+ :unit_multiplier=>0, :decimals => 4, :state=>"NORMAL"},
29
+ },
30
+ :readings => {
31
+ "SECONDARY" => {:value => 1.03e-06, :unit => "AAC",
32
+ :unit_multiplier => -6, :decimals => 2, :state=>"NORMAL"},
33
+ "LIVE" => {:value => 9.99999999e+37, :unit => "OHM",
34
+ :unit_multiplier => 6, :decimals => 1, :state=>"OL"}
35
+ })
36
+
37
+ expected = "0.0362 VAC (secondary: 1.03 uAAC, live: OL MOHM)"
38
+ assert_equal expected, measurement.to_s
39
+ end
40
+
41
+ def test_to_s__live_is_same_as_primary
42
+ measurement = DmmUtil::RecordingMeasurement.new(:readings2 => {
43
+ "PRIMARY" => {:value=>0.0362, :unit => "VAC",
44
+ :unit_multiplier=>0, :decimals => 4, :state=>"NORMAL"},
45
+ },
46
+ :readings => {
47
+ "LIVE" => {:value=>0.0362, :unit => "VAC",
48
+ :unit_multiplier=>0, :decimals => 4, :state=>"NORMAL"}
49
+ })
50
+
51
+ expected = "0.0362 VAC"
52
+ assert_equal expected, measurement.to_s
53
+ end
54
+
55
+ end