File: qr_code_test.rb

package info (click to toggle)
ruby-barby 0.6.8%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 456 kB
  • sloc: ruby: 4,169; java: 1,228; makefile: 8
file content (78 lines) | stat: -rw-r--r-- 2,274 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
require 'test_helper'
require 'barby/barcode/qr_code'

class QrCodeTest < Barby::TestCase

  before do
    @data = 'Ereshkigal'
    @code = QrCode.new(@data)
  end

  it "should have the expected data" do
    @code.data.must_equal @data
  end

  it "should have the expected encoding" do
    # Should be an array of strings, where each string represents a "line"
    @code.encoding.must_equal(rqrcode(@code).modules.map do |line|
      line.inject(''){|s,m| s << (m ? '1' : '0') }
    end)

  end
  
  it "should be able to change its data and output a different encoding" do
    @code.data = 'hades'
    @code.data.must_equal 'hades'
    @code.encoding.must_equal(rqrcode(@code).modules.map do |line|
      line.inject(''){|s,m| s << (m ? '1' : '0') }
    end)
  end
  
  it "should have a 'level' accessor" do
    @code.must_respond_to :level
    @code.must_respond_to :level=
  end
  
  it "should set size according to size of data" do
    QrCode.new('1'*15, :level => :l).size.must_equal 1
    QrCode.new('1'*15, :level => :m).size.must_equal 2
    QrCode.new('1'*15, :level => :q).size.must_equal 2
    QrCode.new('1'*15, :level => :h).size.must_equal 3
  
    QrCode.new('1'*30, :level => :l).size.must_equal 2
    QrCode.new('1'*30, :level => :m).size.must_equal 3
    QrCode.new('1'*30, :level => :q).size.must_equal 3
    QrCode.new('1'*30, :level => :h).size.must_equal 4
  
    QrCode.new('1'*270, :level => :l).size.must_equal 10
  end
  
  it "should allow size to be set manually" do
    code = QrCode.new('1'*15, :level => :l, :size => 2)
    code.size.must_equal 2
    code.encoding.must_equal(rqrcode(code).modules.map do |line|
      line.inject(''){|s,m| s << (m ? '1' : '0') }
    end)
  end
  
  it "should raise ArgumentError when data too large" do
    assert QrCode.new('1'*2953, :level => :l)
    lambda{ QrCode.new('1'*2954, :level => :l) }.must_raise ArgumentError
  end
  
  it "should return the original data on to_s" do
    @code.to_s.must_equal 'Ereshkigal'
  end
  
  it "should include at most 20 characters on to_s" do
    QrCode.new('123456789012345678901234567890').to_s.must_equal '12345678901234567890'
  end

  
  private
  
  def rqrcode(code)
    RQRCode::QRCode.new(code.data, :level => code.level, :size => code.size)
  end

end