#!/usr/bin/env ruby begin require 'rubygems' rescue LoadError # nothing end require 'test/unit' require 'flexmock' require 'x10/cm17a' ###################################################################### class NoopClass def method_missing(sym, *args, &block) self end end NOOP = NoopClass.new ###################################################################### class MockController < FlexMock class << self def setup_controller(controller) X10.controller = controller controller.mock_handle(:device, 1) { |house, unit| X10::Cm17a::Device.new(house, unit, controller) } end def use super do |mock| setup_controller(mock) yield(mock) end end end end ###################################################################### class TestCm17a < Test::Unit::TestCase def setup end def teardown X10.controller = nil end def test_create MockController.use do |controller| dev = X10.device('a1') assert_not_nil(dev) end end def test_on MockController.use do |controller| controller.mock_handle(:command, 1) { |house, unit, cmd, step| assert_equal X10::Cm17a::ON, cmd assert_equal 0, step } dev = X10.device('a1') dev.on end end def test_off MockController.use do |controller| controller.mock_handle(:command, 1) { |house, unit, cmd, step| assert_equal X10::Cm17a::OFF, cmd assert_equal 0, step } dev = X10.device('a1') dev.off end end def test_step_size MockController.use do |controller| dev = X10.device('a1') assert_equal 0, dev.send(:steps_for, 0.0) assert_equal 5, dev.send(:steps_for, 0.5) assert_equal 5, dev.send(:steps_for, -0.5) assert_equal 10, dev.send(:steps_for, 1.0) end end def test_adjust MockController.use do |controller| controller.mock_handle(:command, 2) { |house, unit, cmd, step| if step == 4 assert_equal 4, step assert_equal X10::Cm17a::BRIGHTEN, cmd else assert_equal 3, step assert_equal X10::Cm17a::DIM, cmd end } dev = X10.device('a1') dev.adjust(0.4) dev.adjust(-0.3) end end def test_big_adjustments MockController.use do |controller| controller.mock_handle(:command, 2) { |house, unit, cmd, step| assert_equal X10::Cm17a::DIM, cmd if step == 6 assert_equal 6, step else assert_equal 3, step end } dev = X10.device('a1') dev.adjust(-0.9) end end def test_small_adjustments MockController.use do |controller| controller.mock_handle(:command, 0) { } dev = X10.device('a1') dev.adjust(0.0) end end def test_device_addressing MockController.use do |controller| controller.mock_handle(:command) { |house, unit, cmd, step| assert_equal 1, house assert_equal 2, unit } dev = X10.device('b3') dev.off dev.on dev.adjust(1) dev.adjust(-1) end end end ###################################################################### class TestCm17aNonApi < Test::Unit::TestCase def setup X10.controller = MockController.new X10.controller.mock_handle(:command) { } MockController.setup_controller(X10.controller) @dev = X10.device("a1") end def teardown X10.controller = nil end def test_query @dev.on assert @dev.send(:on?) assert ! @dev.send(:off?) @dev.off assert ! @dev.send(:on?) assert @dev.send(:off?) @dev.on assert @dev.send(:on?) assert ! @dev.send(:off?) end def test_undefined_on_off_state assert_raises(X10::X10Error) { @dev.send(:on?) } end def test_undefined_level assert_raises(X10::X10Error) { @dev.send(:level) } end def test_undefined_level_after_adjust assert_raises(X10::X10Error) { @dev.adjust(0.3) @dev.send(:level) } end def test_level @dev.off assert_equal 0.0, @dev.send(:level) @dev.adjust(-0.5) assert_equal 0.0, @dev.send(:level) @dev.on assert_equal 1.0, @dev.send(:level) @dev.adjust(0.1) assert_equal 1.0, @dev.send(:level) @dev.adjust(-0.5) assert_equal 0.5, @dev.send(:level) @dev.adjust(-0.5) assert_equal 0.0, @dev.send(:level) @dev.adjust(-0.5) assert_equal 0.0, @dev.send(:level) end end ###################################################################### class TestCm17aController < Test::Unit::TestCase def test_create X10.controller = X10::Cm17a::Controller.new d = X10.device('a1') assert_not_nil d end end