minilab 1.0.0-mswin32
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.
- data/.document +2 -0
- data/CHANGES +2 -0
- data/LICENSE +19 -0
- data/README +107 -0
- data/Rakefile +145 -0
- data/config/environment.rb +15 -0
- data/config/objects.yml +22 -0
- data/lib/analog_io.rb +30 -0
- data/lib/digital_auxport_io.rb +49 -0
- data/lib/digital_configuration.rb +66 -0
- data/lib/digital_port_io.rb +68 -0
- data/lib/extension/extconf.rb +4 -0
- data/lib/extension/minilab_hardware.c +235 -0
- data/lib/extension/minilab_hardware.so +0 -0
- data/lib/library_translator.rb +48 -0
- data/lib/minilab.rb +149 -0
- data/lib/minilab_context.rb +39 -0
- data/lib/result_verifier.rb +14 -0
- data/test/integration/analog_input_output_test.rb +43 -0
- data/test/integration/connect_to_hardware_test.rb +13 -0
- data/test/integration/digital_input_output_test.rb +114 -0
- data/test/integration/integration_test.rb +53 -0
- data/test/integration/require_minilab_test.rb +9 -0
- data/test/system/analog_input.test +3 -0
- data/test/system/analog_output.test +37 -0
- data/test/system/digital_port_input.test +5 -0
- data/test/system/digital_port_output.test +39 -0
- data/test/system/digital_port_read_byte.test +26 -0
- data/test/system/digital_screw_terminals_input.test +2 -0
- data/test/system/digital_screw_terminals_output.test +11 -0
- data/test/system/minilab_driver.rb +85 -0
- data/test/test_helper.rb +11 -0
- data/test/unit/analog_io_test.rb +87 -0
- data/test/unit/digital_auxport_io_test.rb +114 -0
- data/test/unit/digital_configuration_test.rb +136 -0
- data/test/unit/digital_port_io_test.rb +117 -0
- data/test/unit/library_translator_test.rb +100 -0
- data/test/unit/minilab_context_test.rb +82 -0
- data/test/unit/minilab_hardware_test.rb +83 -0
- data/test/unit/minilab_test.rb +131 -0
- data/test/unit/result_verifier_test.rb +33 -0
- data/vendor/behaviors/lib/behaviors.rb +50 -0
- data/vendor/behaviors/tasks/behaviors_tasks.rake +140 -0
- data/vendor/behaviors/test/behaviors_tasks_test.rb +71 -0
- data/vendor/behaviors/test/behaviors_test.rb +50 -0
- data/vendor/behaviors/test/tasks_test/Rakefile +16 -0
- data/vendor/behaviors/test/tasks_test/doc/behaviors.html +55 -0
- data/vendor/behaviors/test/tasks_test/lib/user.rb +2 -0
- data/vendor/behaviors/test/tasks_test/test/user_test.rb +17 -0
- data/vendor/constructor/Rakefile +44 -0
- data/vendor/constructor/config/environment.rb +12 -0
- data/vendor/constructor/lib/constructor.rb +132 -0
- data/vendor/constructor/test/constructor_test.rb +366 -0
- data/vendor/constructor/test/helper.rb +3 -0
- data/vendor/diy/README +26 -0
- data/vendor/diy/Rakefile +18 -0
- data/vendor/diy/lib/constructor.rb +114 -0
- data/vendor/diy/lib/diy.rb +329 -0
- data/vendor/diy/proto/context.rb +117 -0
- data/vendor/diy/proto/context.yml +20 -0
- data/vendor/diy/test/diy_test.rb +370 -0
- data/vendor/diy/test/files/broken_construction.yml +7 -0
- data/vendor/diy/test/files/cat/cat.rb +4 -0
- data/vendor/diy/test/files/cat/extra_conflict.yml +5 -0
- data/vendor/diy/test/files/cat/heritage.rb +2 -0
- data/vendor/diy/test/files/cat/needs_input.yml +3 -0
- data/vendor/diy/test/files/cat/the_cat_lineage.rb +1 -0
- data/vendor/diy/test/files/dog/dog_model.rb +4 -0
- data/vendor/diy/test/files/dog/dog_presenter.rb +4 -0
- data/vendor/diy/test/files/dog/dog_view.rb +2 -0
- data/vendor/diy/test/files/dog/file_resolver.rb +2 -0
- data/vendor/diy/test/files/dog/other_thing.rb +2 -0
- data/vendor/diy/test/files/dog/simple.yml +11 -0
- data/vendor/diy/test/files/donkey/foo.rb +8 -0
- data/vendor/diy/test/files/donkey/foo/bar/qux.rb +7 -0
- data/vendor/diy/test/files/fud/objects.yml +13 -0
- data/vendor/diy/test/files/fud/toy.rb +15 -0
- data/vendor/diy/test/files/gnu/objects.yml +14 -0
- data/vendor/diy/test/files/gnu/thinger.rb +8 -0
- data/vendor/diy/test/files/goat/base.rb +8 -0
- data/vendor/diy/test/files/goat/can.rb +6 -0
- data/vendor/diy/test/files/goat/goat.rb +6 -0
- data/vendor/diy/test/files/goat/objects.yml +12 -0
- data/vendor/diy/test/files/goat/paper.rb +6 -0
- data/vendor/diy/test/files/goat/plane.rb +8 -0
- data/vendor/diy/test/files/goat/shirt.rb +6 -0
- data/vendor/diy/test/files/goat/wings.rb +8 -0
- data/vendor/diy/test/files/horse/holder_thing.rb +4 -0
- data/vendor/diy/test/files/horse/objects.yml +7 -0
- data/vendor/diy/test/files/yak/core_model.rb +4 -0
- data/vendor/diy/test/files/yak/core_presenter.rb +4 -0
- data/vendor/diy/test/files/yak/core_view.rb +1 -0
- data/vendor/diy/test/files/yak/data_source.rb +1 -0
- data/vendor/diy/test/files/yak/fringe_model.rb +4 -0
- data/vendor/diy/test/files/yak/fringe_presenter.rb +4 -0
- data/vendor/diy/test/files/yak/fringe_view.rb +1 -0
- data/vendor/diy/test/files/yak/my_objects.yml +21 -0
- data/vendor/diy/test/test_helper.rb +40 -0
- data/vendor/hardmock/CHANGES +8 -0
- data/vendor/hardmock/LICENSE +7 -0
- data/vendor/hardmock/README +48 -0
- data/vendor/hardmock/Rakefile +100 -0
- data/vendor/hardmock/TODO +7 -0
- data/vendor/hardmock/config/environment.rb +12 -0
- data/vendor/hardmock/homepage/demo.rb +21 -0
- data/vendor/hardmock/homepage/hardmock_sample.png +0 -0
- data/vendor/hardmock/homepage/index.html +65 -0
- data/vendor/hardmock/init.rb +3 -0
- data/vendor/hardmock/lib/hardmock.rb +634 -0
- data/vendor/hardmock/lib/method_cleanout.rb +14 -0
- data/vendor/hardmock/rcov.rake +18 -0
- data/vendor/hardmock/test/functional/assert_error_test.rb +52 -0
- data/vendor/hardmock/test/functional/auto_verify_test.rb +192 -0
- data/vendor/hardmock/test/functional/direct_mock_usage_test.rb +396 -0
- data/vendor/hardmock/test/functional/hardmock_test.rb +380 -0
- data/vendor/hardmock/test/test_helper.rb +23 -0
- data/vendor/hardmock/test/unit/expectation_builder_test.rb +18 -0
- data/vendor/hardmock/test/unit/expector_test.rb +56 -0
- data/vendor/hardmock/test/unit/method_cleanout_test.rb +35 -0
- data/vendor/hardmock/test/unit/mock_control_test.rb +172 -0
- data/vendor/hardmock/test/unit/mock_test.rb +273 -0
- data/vendor/hardmock/test/unit/simple_expectation_test.rb +345 -0
- data/vendor/hardmock/test/unit/trapper_test.rb +60 -0
- data/vendor/hardmock/test/unit/verify_error_test.rb +34 -0
- data/vendor/systir/systir.rb +403 -0
- data/vendor/systir/test/unit/ui/xml/testrunner.rb +192 -0
- data/vendor/systir/test/unit/ui/xml/xmltestrunner.xslt +109 -0
- metadata +235 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'diy'
|
3
|
+
|
4
|
+
class MinilabContext #:nodoc:
|
5
|
+
def build
|
6
|
+
minilab_context = self.class.get_context
|
7
|
+
minilab_context.build_everything
|
8
|
+
minilab_context
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.clear
|
12
|
+
@@context = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.inject(options)
|
16
|
+
object, instance = get_parameters(options)
|
17
|
+
|
18
|
+
get_context[object] = instance
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def self.get_parameters(options)
|
23
|
+
raise "parameters hash was nil" if options.nil?
|
24
|
+
object = options[:object]
|
25
|
+
instance = options[:instance]
|
26
|
+
raise "missing parameter :object" if object.nil?
|
27
|
+
raise "missing parameter :instance" if instance.nil?
|
28
|
+
[object, instance]
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.get_context
|
32
|
+
@@context ||= DIY::Context.new(YAML.load(object_definition))
|
33
|
+
@@context
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.object_definition
|
37
|
+
File.read(APP_ROOT + "/config/objects.yml")
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'constructor'
|
2
|
+
|
3
|
+
class ResultVerifier #:nodoc:
|
4
|
+
constructor :minilab_hardware
|
5
|
+
|
6
|
+
def verify(result, user_message="Command")
|
7
|
+
if result[:error]
|
8
|
+
library_message = @minilab_hardware.get_error_string(result[:error])
|
9
|
+
raise "#{user_message} caused a hardware error: #{library_message}"
|
10
|
+
end
|
11
|
+
|
12
|
+
return true
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
|
2
|
+
require 'integration_test'
|
3
|
+
require 'minilab'
|
4
|
+
|
5
|
+
class AnalogInputOutputTest < IntegrationTest
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
build_and_connect_to_minilab
|
9
|
+
end
|
10
|
+
|
11
|
+
should "read analog data" do
|
12
|
+
for_all_input_channels do |channel|
|
13
|
+
@minilab_hardware.expects.read_analog(channel).returns(no_error_and_value(3.22))
|
14
|
+
end
|
15
|
+
|
16
|
+
for_all_input_channels do |channel|
|
17
|
+
assert_equal 3.22, @minilab.read_analog(channel), "wrong value analog value read"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
should "write analog data" do
|
22
|
+
for_all_output_channels do |channel|
|
23
|
+
@minilab_hardware.expects.write_analog(channel, 1.78).returns(no_error)
|
24
|
+
end
|
25
|
+
|
26
|
+
for_all_output_channels do |channel|
|
27
|
+
assert @minilab.write_analog(channel, 1.78)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def for_all_input_channels
|
33
|
+
0.upto(7) do |channel|
|
34
|
+
yield channel
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def for_all_output_channels
|
39
|
+
0.upto(1) do |channel|
|
40
|
+
yield channel
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
|
2
|
+
require 'integration_test'
|
3
|
+
require 'minilab'
|
4
|
+
|
5
|
+
class ConnectToHardwareTest < IntegrationTest
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
should "setup error handling, declare the library revision, and setup each digital port for input when connecting" do
|
11
|
+
build_and_connect_to_minilab
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
|
2
|
+
require 'integration_test'
|
3
|
+
require 'minilab'
|
4
|
+
|
5
|
+
class DigitalInputOutputTest < IntegrationTest
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
build_and_connect_to_minilab
|
9
|
+
end
|
10
|
+
|
11
|
+
should "read digital data from the terminals on the top of the device" do
|
12
|
+
for_all_screw_terminals do |terminal|
|
13
|
+
terminal_number = get_terminal_number(terminal)
|
14
|
+
configuration = { :direction => DIGITALIN, :pin => terminal_number }
|
15
|
+
@minilab_hardware.expects.configure_auxport(configuration).returns(no_error)
|
16
|
+
@minilab_hardware.expects.read_auxport(terminal_number).returns(no_error_and_value(1))
|
17
|
+
end
|
18
|
+
|
19
|
+
for_all_screw_terminals do |terminal|
|
20
|
+
assert_equal 1, @minilab.read_digital(terminal)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
should "write digital data to the terminals" do
|
25
|
+
for_all_screw_terminals do |terminal|
|
26
|
+
terminal_number = get_terminal_number(terminal)
|
27
|
+
configuration = { :direction => DIGITALOUT, :pin => terminal_number }
|
28
|
+
@minilab_hardware.expects.configure_auxport(configuration).returns(no_error)
|
29
|
+
@minilab_hardware.expects.write_auxport(terminal_number, 0).returns(no_error)
|
30
|
+
end
|
31
|
+
|
32
|
+
for_all_screw_terminals do |terminal|
|
33
|
+
assert @minilab.write_digital(terminal, 0)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
should "read digital data from the external digital pins only if the port is configured for input" do
|
38
|
+
configure_each_port_for_input
|
39
|
+
|
40
|
+
# We'll go with just one pin for each of the four ports.
|
41
|
+
# Finer grained testing of each pin is left to the unit tests.
|
42
|
+
for_some_digital_pins do |numbered_pin, library_pin|
|
43
|
+
@minilab_hardware.expects.read_digital_pin(library_pin).returns(no_error_and_value(0))
|
44
|
+
assert_equal 0, @minilab.read_digital(numbered_pin), "wrong value"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
should "raise an error when there is a problem reading a digital pin" do
|
49
|
+
configure_each_port_for_input
|
50
|
+
for_some_digital_pins do |numbered_pin, library_pin|
|
51
|
+
@minilab_hardware.expects.read_digital_pin(library_pin).returns(error(2))
|
52
|
+
expect_get_error_string :error => 2, :message => "yoink"
|
53
|
+
assert_error(RuntimeError, /yoink/) { @minilab.read_digital(numbered_pin) }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
should "write digital data to the external digital pins only if the port is configured for output" do
|
58
|
+
configure_each_port_for_output
|
59
|
+
|
60
|
+
for_some_digital_pins do |numbered_pin, library_pin|
|
61
|
+
@minilab_hardware.expects.write_digital_pin(library_pin, 1).returns(no_error)
|
62
|
+
assert @minilab.write_digital(numbered_pin, 1), "should have written with no error"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
should "read an entire byte from a single port only if the port is configured for input" do
|
67
|
+
configure_each_port_for_input
|
68
|
+
@port_to_library_port_mapping.each do |port, library_port|
|
69
|
+
@minilab_hardware.expects.read_port(library_port).returns(no_error_and_value(167))
|
70
|
+
assert_equal 167, @minilab.read_digital_byte(port), "read wrong value"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
def get_terminal_number(terminal)
|
76
|
+
terminal[-1..-1].to_i
|
77
|
+
end
|
78
|
+
|
79
|
+
def for_some_digital_pins
|
80
|
+
# The pins numbered on the external ports don't match what the
|
81
|
+
# minilab library uses. The ruby code is responsible for doing the
|
82
|
+
# correct translation.
|
83
|
+
{
|
84
|
+
32 => 5,
|
85
|
+
6 => 12,
|
86
|
+
26 => 19,
|
87
|
+
25 => 20
|
88
|
+
}.each do |numbered_pin, library_pin|
|
89
|
+
yield numbered_pin, library_pin
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def for_all_screw_terminals
|
94
|
+
['DIO0', 'DIO1', 'DIO2', 'DIO3'].each do |terminal|
|
95
|
+
yield terminal
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def configure_each_port_for_input
|
100
|
+
@port_to_library_port_mapping.each do |port, library_port|
|
101
|
+
expected_configuration = { :direction => DIGITALIN, :port => library_port }
|
102
|
+
@minilab_hardware.expects.configure_port(expected_configuration).returns(no_error)
|
103
|
+
@minilab.configure_input_port(port)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def configure_each_port_for_output
|
108
|
+
@port_to_library_port_mapping.each do |port, library_port|
|
109
|
+
expected_configuration = { :direction => DIGITALOUT, :port => library_port }
|
110
|
+
@minilab_hardware.expects.configure_port(expected_configuration).returns(no_error)
|
111
|
+
@minilab.configure_output_port(port)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'minilab_context'
|
2
|
+
require 'extension/minilab_hardware'
|
3
|
+
|
4
|
+
class IntegrationTest < Test::Unit::TestCase
|
5
|
+
include MinilabConstants
|
6
|
+
|
7
|
+
def setup
|
8
|
+
MinilabContext.clear
|
9
|
+
create_mock :minilab_hardware
|
10
|
+
MinilabContext.inject :object => :minilab_hardware, :instance => @minilab_hardware
|
11
|
+
|
12
|
+
@port_to_library_port_mapping = {
|
13
|
+
:porta => FIRSTPORTA,
|
14
|
+
:portb => FIRSTPORTB,
|
15
|
+
:portcl => FIRSTPORTCL,
|
16
|
+
:portch => FIRSTPORTCH
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def no_error
|
21
|
+
{:no => :error}
|
22
|
+
end
|
23
|
+
|
24
|
+
def error(number)
|
25
|
+
{:error => number}
|
26
|
+
end
|
27
|
+
|
28
|
+
def no_error_and_value(value)
|
29
|
+
{:no => :error, :value => value}
|
30
|
+
end
|
31
|
+
|
32
|
+
def expect_get_error_string(optz)
|
33
|
+
@minilab_hardware.expects.get_error_string(optz[:error]).returns(optz[:message])
|
34
|
+
end
|
35
|
+
|
36
|
+
def build_and_connect_to_minilab
|
37
|
+
@minilab = Minilab.build
|
38
|
+
|
39
|
+
@minilab_hardware.expects.setup_error_handling(DONTPRINT, STOPALL).returns(no_error)
|
40
|
+
@minilab_hardware.expects.declare_revision(CURRENTREVNUM).returns(no_error)
|
41
|
+
|
42
|
+
configure_input_result = {:no => :error}
|
43
|
+
[:porta, :portb, :portcl, :portch].each do |port|
|
44
|
+
expected_configuration = { :direction => DIGITALIN, :port => @port_to_library_port_mapping[port] }
|
45
|
+
@minilab_hardware.expects.configure_port(expected_configuration).returns(no_error)
|
46
|
+
end
|
47
|
+
|
48
|
+
@minilab.connect
|
49
|
+
end
|
50
|
+
|
51
|
+
should "have an empty test case so that Test::Unit::TestCase doesn't complain" do
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
|
2
|
+
require 'integration_test'
|
3
|
+
|
4
|
+
class RequireMinilabTest < IntegrationTest
|
5
|
+
should "be able to require the minilab class without error" do
|
6
|
+
`ruby -e "require 'lib/minilab'"`
|
7
|
+
assert $?.success?, "failed to require minilab without error"
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# The sleeps are required, as it takes time for the
|
2
|
+
# commanded voltages to reach the desired value
|
3
|
+
|
4
|
+
# test analog output 1
|
5
|
+
write_analog_1 5.0
|
6
|
+
sleep 0.1
|
7
|
+
analog_input_0_should_be_about 5.0
|
8
|
+
|
9
|
+
write_analog_1 0.0
|
10
|
+
sleep 0.1
|
11
|
+
analog_input_0_should_be_about 0.0
|
12
|
+
|
13
|
+
write_analog_1 2.77
|
14
|
+
sleep 0.1
|
15
|
+
analog_input_0_should_be_about 2.77
|
16
|
+
|
17
|
+
write_analog_1 3.19
|
18
|
+
sleep 0.1
|
19
|
+
analog_input_0_should_be_about 3.19
|
20
|
+
|
21
|
+
# test analog output 0
|
22
|
+
write_analog_0 5.0
|
23
|
+
sleep 0.1
|
24
|
+
analog_input_6_should_be_about 5.0
|
25
|
+
|
26
|
+
write_analog_0 0.0
|
27
|
+
sleep 0.1
|
28
|
+
analog_input_6_should_be_about 0.0
|
29
|
+
|
30
|
+
write_analog_0 3.75
|
31
|
+
sleep 0.1
|
32
|
+
analog_input_6_should_be_about 3.75
|
33
|
+
|
34
|
+
write_analog_0 1.88
|
35
|
+
sleep 0.1
|
36
|
+
analog_input_6_should_be_about 1.88
|
37
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Port A --> Port B test
|
2
|
+
configure_porta_for_output
|
3
|
+
configure_portb_for_input
|
4
|
+
|
5
|
+
write_digital_pin_36 1
|
6
|
+
digital_pin_7_should_be 1
|
7
|
+
|
8
|
+
write_digital_pin_36 0
|
9
|
+
digital_pin_7_should_be 0
|
10
|
+
|
11
|
+
# Port B --> Port CL test
|
12
|
+
configure_portb_for_output
|
13
|
+
configure_portcl_for_input
|
14
|
+
|
15
|
+
write_digital_pin_5 0
|
16
|
+
digital_pin_28_should_be 0
|
17
|
+
|
18
|
+
write_digital_pin_5 1
|
19
|
+
digital_pin_28_should_be 1
|
20
|
+
|
21
|
+
# Port CL -> Port CH test
|
22
|
+
configure_portcl_for_output
|
23
|
+
configure_portch_for_input
|
24
|
+
|
25
|
+
write_digital_pin_27 1
|
26
|
+
digital_pin_22_should_be 1
|
27
|
+
|
28
|
+
write_digital_pin_27 0
|
29
|
+
digital_pin_22_should_be 0
|
30
|
+
|
31
|
+
# Port CH -> Port A test
|
32
|
+
configure_portch_for_output
|
33
|
+
configure_porta_for_input
|
34
|
+
|
35
|
+
write_digital_pin_24 0
|
36
|
+
digital_pin_34_should_be 0
|
37
|
+
|
38
|
+
write_digital_pin_24 1
|
39
|
+
digital_pin_34_should_be 1
|
@@ -0,0 +1,26 @@
|
|
1
|
+
configure_porta_for_output
|
2
|
+
configure_portcl_for_output
|
3
|
+
configure_portb_for_input
|
4
|
+
|
5
|
+
# GND to pin 3 (portb bit 7)
|
6
|
+
# GND to pin 4 (portb bit 6)
|
7
|
+
write_digital_pin_28 1 # map to pin 5 (portb bit 5)
|
8
|
+
# GND to pin 6 (portb bit 4)
|
9
|
+
write_digital_pin_36 1 # map to pin 7 (portb bit 3)
|
10
|
+
# GND to pin 8 (portb bit 2)
|
11
|
+
# GND to pin 9 (portb bit 1)
|
12
|
+
# +5v to pin 10 (portb bit 0)
|
13
|
+
digital_portb_should_be 0x29
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
configure_porta_for_output
|
18
|
+
configure_portcl_for_output
|
19
|
+
configure_portch_for_input
|
20
|
+
|
21
|
+
write_digital_pin_27 1 # map to pin 22 (portch bit 3)
|
22
|
+
# GND to pin 23 (portch bit 2)
|
23
|
+
write_digital_pin_32 1 # map to pin 24 (portch bit 1)
|
24
|
+
# GND to pin 22 (portch bit 0)
|
25
|
+
digital_portch_should_be 0x0A
|
26
|
+
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'systir'
|
2
|
+
require 'minilab'
|
3
|
+
|
4
|
+
class MinilabDriver < Systir::LanguageDriver
|
5
|
+
GOOD_DELTA = 0.12
|
6
|
+
VALID_PORTS = [:porta, :portb, :portcl, :portch]
|
7
|
+
VALID_PINS = (30..37).to_a + (3..10).to_a + (26..29).to_a + (22..25).to_a
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@minilab = Minilab.build
|
11
|
+
@minilab.connect
|
12
|
+
end
|
13
|
+
|
14
|
+
# Analog input methods
|
15
|
+
0.upto(7) do |channel|
|
16
|
+
define_method("analog_input_#{channel}_should_be_about") do |value|
|
17
|
+
expect_read_analog(channel, value)
|
18
|
+
end
|
19
|
+
|
20
|
+
define_method("analog_input_#{channel}_should_be_greater_than") do |value|
|
21
|
+
volts = @minilab.read_analog(channel)
|
22
|
+
assert volts > (value + GOOD_DELTA)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Analog output methods
|
27
|
+
[0, 1].each do |channel|
|
28
|
+
define_method("write_analog_#{channel}") do |value|
|
29
|
+
@minilab.write_analog(channel, value)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# DIOx input and output methods
|
34
|
+
0.upto(3) do |pin|
|
35
|
+
define_method("DIO#{pin}_should_be") do |value|
|
36
|
+
assert_equal value, @minilab.read_digital("DIO#{pin}")
|
37
|
+
end
|
38
|
+
|
39
|
+
define_method("write_DIO#{pin}") do |value|
|
40
|
+
@minilab.write_digital("DIO#{pin}", value)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Digital pin input and output methods
|
45
|
+
VALID_PINS.each do |pin|
|
46
|
+
define_method("digital_pin_#{pin}_should_be") do |value|
|
47
|
+
assert_equal value, @minilab.read_digital(pin)
|
48
|
+
end
|
49
|
+
|
50
|
+
define_method("write_digital_pin_#{pin}") do |value|
|
51
|
+
@minilab.write_digital(pin, value)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Digital port read (entire bytes) methods
|
56
|
+
VALID_PORTS.each do |port|
|
57
|
+
define_method("digital_#{port}_should_be") do |value|
|
58
|
+
assert_equal value, @minilab.read_digital_byte(port)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Configuration methods
|
63
|
+
VALID_PORTS.each do |port|
|
64
|
+
define_method("configure_#{port}_for_input") do
|
65
|
+
@minilab.configure_input_port(port)
|
66
|
+
end
|
67
|
+
|
68
|
+
define_method("configure_#{port}_for_output") do
|
69
|
+
@minilab.configure_output_port(port)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# Other
|
74
|
+
def minilab_revision_should_be(revision)
|
75
|
+
assert_equal revision, @minilab.get_revision
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
def expect_read_analog(channel, volts)
|
80
|
+
input = @minilab.read_analog(channel)
|
81
|
+
|
82
|
+
assert_in_delta(volts, input, GOOD_DELTA,
|
83
|
+
"Input voltage was not ~#{volts} volts")
|
84
|
+
end
|
85
|
+
end
|