From b908bec0bfb9d884174e980455050e7275d42504 Mon Sep 17 00:00:00 2001 From: Sam-Serpoosh Date: Thu, 31 Oct 2013 10:21:35 -0400 Subject: [PATCH 1/2] Add test for Request. - Test for dlen, packet_body, checksum, etc. - Delete indirect tests for request. - Couple of minor Refactoring on Request checksum, etc. --- lib/sphero/request.rb | 8 ++++++-- test/test_request.rb | 34 ++++++++++++++++++++++++++++++++++ test/test_sphero.rb | 14 -------------- 3 files changed, 40 insertions(+), 16 deletions(-) create mode 100644 test/test_request.rb delete mode 100644 test/test_sphero.rb diff --git a/lib/sphero/request.rb b/lib/sphero/request.rb index 2ff0857..6ddb60d 100644 --- a/lib/sphero/request.rb +++ b/lib/sphero/request.rb @@ -31,7 +31,7 @@ def response header, body end def packet_header - header.pack 'CCCCCC' + header.pack 'C*' end def packet_body @@ -39,7 +39,11 @@ def packet_body end def checksum - ~((packet_header + packet_body).unpack('C*').drop(2).reduce(:+) % 256) & 0xFF + unpacked_header_and_body = (packet_header + packet_body).unpack("C*") + dropped_sops = unpacked_header_and_body.drop(2) + reduced = dropped_sops.reduce(:+) + ones_complement = ~reduced + ones_complement & 0xFF end def bytes diff --git a/test/test_request.rb b/test/test_request.rb new file mode 100644 index 0000000..f595d27 --- /dev/null +++ b/test/test_request.rb @@ -0,0 +1,34 @@ +require 'minitest/autorun' +require_relative "../lib/sphero/request" + +class TestSphero < MiniTest::Unit::TestCase + STUB_REQUEST_ID = 0x05 + + def setup + @stub_request_class = Sphero::Request. + make_command(Sphero::Request, STUB_REQUEST_ID) + end + + def test_request_checksum + stub_request = @stub_request_class.new(0x01, 1, 2) + assert_equal 243, stub_request.checksum + end + + def test_packet_body + auto_reconnect = @stub_request_class.new(0x01, 0, 0x00) + assert_equal [0, 0x00].pack("C*"), auto_reconnect.packet_body + end + + def test_request_dlen + auto_reconnect = @stub_request_class.new(0x01, 0, 0x00) + assert_equal 3, auto_reconnect.dlen + end + + def test_request_header + stub_request = @stub_request_class.new(0x01, 1, 2) + expected_header = [Sphero::Request::SOP1, Sphero::Request::SOP2, + 0x00, STUB_REQUEST_ID, 0x01, 3] + + assert_equal expected_header, stub_request.header + end +end diff --git a/test/test_sphero.rb b/test/test_sphero.rb deleted file mode 100644 index ecdca09..0000000 --- a/test/test_sphero.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'minitest/autorun' -require 'sphero' - -class TestSphero < MiniTest::Unit::TestCase - def test_ping_checksum - ping = Sphero::Request::Ping.new 0 - assert_equal "\xFF\xFF\x00\x01\x00\x01\xFD".bytes, ping.to_str.bytes - end - - def test_sleep_dlen - sleep = Sphero::Request::Sleep.new 0, 0, 0 - assert_equal 0x04, sleep.dlen - end -end From e96aff8f8d24adf2567568a1130ddd304d2b6495 Mon Sep 17 00:00:00 2001 From: Sam-Serpoosh Date: Fri, 1 Nov 2013 14:45:36 -0400 Subject: [PATCH 2/2] Add test for ping checksum and sleep dlen. - Address @tenderlove feedbacks on the previous pull request. - Put back %256 in checksum calculation - change require_relative to require. --- lib/sphero/request.rb | 9 +++++---- test/test_request.rb | 29 ++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/lib/sphero/request.rb b/lib/sphero/request.rb index 6ddb60d..b7651fe 100644 --- a/lib/sphero/request.rb +++ b/lib/sphero/request.rb @@ -31,7 +31,8 @@ def response header, body end def packet_header - header.pack 'C*' + format = "C" * header.length + header.pack format end def packet_body @@ -39,9 +40,9 @@ def packet_body end def checksum - unpacked_header_and_body = (packet_header + packet_body).unpack("C*") - dropped_sops = unpacked_header_and_body.drop(2) - reduced = dropped_sops.reduce(:+) + unpacked_header_and_body = (packet_header + packet_body).unpack "C*" + dropped_sops = unpacked_header_and_body.drop 2 + reduced = dropped_sops.reduce(:+) % 256 ones_complement = ~reduced ones_complement & 0xFF end diff --git a/test/test_request.rb b/test/test_request.rb index f595d27..db12282 100644 --- a/test/test_request.rb +++ b/test/test_request.rb @@ -1,34 +1,49 @@ require 'minitest/autorun' -require_relative "../lib/sphero/request" +require 'sphero/request' -class TestSphero < MiniTest::Unit::TestCase +class TestRequest < MiniTest::Unit::TestCase STUB_REQUEST_ID = 0x05 def setup @stub_request_class = Sphero::Request. - make_command(Sphero::Request, STUB_REQUEST_ID) + make_command Sphero::Request, STUB_REQUEST_ID end def test_request_checksum - stub_request = @stub_request_class.new(0x01, 1, 2) + stub_request = @stub_request_class.new 0x01, 1, 2 assert_equal 243, stub_request.checksum end def test_packet_body - auto_reconnect = @stub_request_class.new(0x01, 0, 0x00) + auto_reconnect = @stub_request_class.new 0x01, 0, 0x00 assert_equal [0, 0x00].pack("C*"), auto_reconnect.packet_body end def test_request_dlen - auto_reconnect = @stub_request_class.new(0x01, 0, 0x00) + auto_reconnect = @stub_request_class.new 0x01, 0, 0x00 assert_equal 3, auto_reconnect.dlen end def test_request_header - stub_request = @stub_request_class.new(0x01, 1, 2) + stub_request = @stub_request_class.new 0x01, 1, 2 expected_header = [Sphero::Request::SOP1, Sphero::Request::SOP2, 0x00, STUB_REQUEST_ID, 0x01, 3] assert_equal expected_header, stub_request.header end + + def test_ping_to_str + ping = Sphero::Request::Ping.new 0 + assert_equal "\xFF\xFF\x00\x01\x00\x01\xFD", ping.to_str + end + + def test_ping_checksum + ping = Sphero::Request::Ping.new 0 + assert_equal "\xFD", ping.checksum.chr + end + + def test_sleep_dlen + sleep = Sphero::Request::Sleep.new 0, 0, 0 + assert_equal 0x04, sleep.dlen + end end