Skip to content

Commit

Permalink
Merge pull request #62 from pikesley/fix-ups
Browse files Browse the repository at this point in the history
Fix ups
  • Loading branch information
Sam Pikesley committed May 24, 2015
2 parents ae79094 + 36505c4 commit a13041b
Show file tree
Hide file tree
Showing 8 changed files with 125 additions and 118 deletions.
2 changes: 1 addition & 1 deletion lib/uncle_clive/font_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def bytes s
a = @chars[s] ||= @chars[" "]
b = []
a.each do |int|
b << ("%08d" % int.to_s(2)).split("").map { |i| i.to_i }
b << (0..7).map { |i| int[i] }.reverse
end

b
Expand Down
49 changes: 20 additions & 29 deletions spec/decorators/run_length_encoder_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,35 @@
module UncleClive
module Decorators
describe RunLengthEncoder do
before :each do
@cs = RunLengthEncoder.new FontGenerator.new
@lines = @cs['b']
end
let(:fg) { RunLengthEncoder.new FontGenerator.new }
let(:lines) { fg['b'] }

it "should have lines" do
@lines.length.should == 8
it 'has lines' do
expect(lines.length).to eq 8
end

it "should have lines containing arrays of hashes" do
@lines[0].class.should == Array
@lines[0][0].class.should == Hash
it 'has lines containing arrays of hashes' do
expect(lines[0].class).to eq Array
expect(lines[0][0].class).to eq Hash
end

it "should have a first line of 0's" do
@lines[0][0].should == {
0 => 8
}
it 'has a first line of zeroes' do
expect(lines[0][0]).to eq ({ 0 => 8 })
end

it "should encode a row correctly" do
@cs.encode([1, 1, 1, 0, 0, 0, 1]).should == [
{
1 => 3
},
{
0 => 3
},
{
1 => 1
}
it 'encodes a row correctly' do
expect(fg.encode [1, 1, 1, 0, 0, 0, 1]).to eq [
{ 1 => 3 },
{ 0 => 3 },
{ 1 => 1 }
]
end
it "should have a second line thus" do
@lines[1].should == [
{0 => 2},
{1 => 1},
{0 => 5}

it 'has a second line thus' do
expect(lines[1]).to eq [
{ 0 => 2 },
{ 1 => 1 },
{ 0 => 5 }
]
end
end
Expand Down
35 changes: 18 additions & 17 deletions spec/formatters/html_table_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,35 @@
module UncleClive
module Formatters
describe HTMLTableFormatter do
let(:fg) { FontGenerator.new }

before :each do
@cs = FontGenerator.new
@cs.formatter = UncleClive::Formatters::HTMLTableFormatter.new
fg.formatter = UncleClive::Formatters::HTMLTableFormatter.new
end

it "should look table-ish" do
@cs.formatter.rle = false
@cs['a'].should match /<table/
it 'looks table-ish' do
fg.formatter.rle = false
expect(fg['a']).to match /<table/
end

it "should have rows 8 cells wide" do
@cs.formatter.rle = false
@cs['a'].should match /<tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr>/
it 'has rows 8 cells wide' do
fg.formatter.rle = false
expect(fg['a']).to match /<tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr>/
end

it "should be a complete table" do
@cs.formatter.rle = false
@cs['1982'].should match /<!-- 1982 -->/
@cs['1982'].should match /<table class="sinclair"><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><\/table>/
it 'is a complete table' do
fg.formatter.rle = false
expect(fg['1982']).to match /<!-- 1982 -->/
expect(fg['1982']).to match /<table class="sinclair"><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="on"> <\/td><td class="off"> <\/td><\/tr><tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><\/table>/
end

it "should be run-length encoded by default" do
@cs['b'].should match /<tr class="sinclair"><td class="off" colspan="8"> <\/td><\/tr><tr class="sinclair"><td class="off" colspan="2"> <\/td><td class="on"> <\/td><td class="off" colspan="5"> <\/td><\/tr>/
it 'is run-length encoded by default' do
expect(fg['b']).to match /<tr class="sinclair"><td class="off" colspan="8"> <\/td><\/tr><tr class="sinclair"><td class="off" colspan="2"> <\/td><td class="on"> <\/td><td class="off" colspan="5"> <\/td><\/tr>/
end

it "should have a row of single cells to make the spacing sane" do
@cs['b'].should match /<tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><\/table>/
it 'has a row of single cells to make the spacing sane' do
expect(fg['b']).to match /<tr class="sinclair"><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><td class="off"> <\/td><\/tr><\/table>/
end
end
end
end
end
45 changes: 23 additions & 22 deletions spec/formatters/json_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
module UncleClive
module Formatters
describe JSONFormatter do
let(:fg) { FontGenerator.new }

before :each do
@cs = FontGenerator.new
@cs.formatter = UncleClive::Formatters::JSONFormatter.new
fg.formatter = UncleClive::Formatters::JSONFormatter.new
end

it "should return JSON" do
@cs[' '].should == {
:id => " ",
it 'returns JSON' do
expect(fg[' ']).to eq ({
:id => ' ',
:data => [
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
Expand All @@ -21,12 +22,12 @@ module Formatters
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]
]
}.to_json
}.to_json)
end

it "should return JSON for longer strings" do
@cs['1982'].should == {
:id => "1982",
it 'returns JSON for longer strings' do
expect(fg['1982']).to eq ({
:id => '1982',
:data => [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
Expand All @@ -37,12 +38,12 @@ module Formatters
[0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
}.to_json
}.to_json)
end

it "should handle a non-existent key gracefully" do
@cs['€'].should == {
:id => "€",
it 'handles a non-existent key gracefully' do
expect(fg['€']).to eq ({
:id => '€',
:data => [
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
Expand All @@ -53,11 +54,11 @@ module Formatters
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]
]
}.to_json
}.to_json)
end

it "should recognise a double-quote as a key" do
@cs['"'].should == {
it 'recognises a double-quote as a key' do
expect(fg['"']).to eq ({
:id => '"',
:data => [
[0, 0, 0, 0, 0, 0, 0, 0],
Expand All @@ -69,12 +70,12 @@ module Formatters
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]
]
}.to_json
}.to_json)
end

it "should know what a forward-slash is" do
@cs['/'].should == {
:id => "/",
it 'knows what a forward-slash is' do
expect(fg['/']).to eq ({
:id => '/',
:data => [
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
Expand All @@ -85,8 +86,8 @@ module Formatters
[0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]
]
}.to_json
}.to_json)
end
end
end
end
end

0 comments on commit a13041b

Please sign in to comment.