Skip to content

Instantly share code, notes, and snippets.

@tbpgr
Created July 20, 2013 12:04
Show Gist options
  • Save tbpgr/6044785 to your computer and use it in GitHub Desktop.
Save tbpgr/6044785 to your computer and use it in GitHub Desktop.
RSPecでパラメタライズドテストをするために利用するモジュールとその利用例
# encoding: utf-8
module ParameterizedTable
def cases(case_table)
@cases = []
keys = get_keys(case_table.split("\n").first)
case_table.split("\n")[1..-1].each_with_index do |line, line_index|
words = get_values(keys, line)
words[:case_no] = line_index + 1
@cases << words
end
end
private
def get_keys(keys_line)
keys_line.strip.split("|")[1..-1].map(&:strip)
end
private
def get_values(keys, values_line)
words = {}
values_line.strip!.split("|")[1..-1].each_with_index do |word, word_index|
words[keys[word_index].to_sym] = instance_eval(word.strip)
end
words
end
end
# encoding: utf-8
class String
alias :old_plus :+
KANSUJI = {"一"=>1, "二"=>2, "三"=>3, "四"=>4, "五"=>5, "六"=>6, "七"=>7, "八"=>8, "九"=>9, "十"=>10}
def kansuji_to_i
return self unless KANSUJI.has_key? self
KANSUJI[self]
end
def kansuji?
return true if KANSUJI[self]
false
end
def + (value)
return self.kansuji_to_i + value.kansuji_to_i if self.kansuji? && value.kansuji?
self.old_plus value
end
end
# encoding: utf-8
require_relative "../lib/string"
require_relative "parametarized_table"
describe String do
extend ParameterizedTable
describe "kansuji?" do
cases <<-_
|value|expected|
|"一" |true |
|"二" |true |
|"三" |true |
|"四" |true |
|"五" |true |
|"六" |true |
|"七" |true |
|"八" |true |
|"九" |true |
|"十" |true |
|"1" |false |
|"" |false |
_
@cases.each do |c|
it do
ret = c[:value].kansuji?
expect(ret).to eq(c[:expected])
end
end
end
describe "kansuji_to_i" do
cases <<-_
|value|expected|
|"一" |1 |
|"二" |2 |
|"三" |3 |
|"四" |4 |
|"五" |5 |
|"六" |6 |
|"七" |7 |
|"八" |8 |
|"九" |9 |
|"十" |10 |
|"1" |"1" |
|"" |"" |
_
@cases.each do |c|
it "kansuji #{c[:value]} is number #{c[:expected]}" do
ret = c[:value].kansuji_to_i
expect(ret).to eq(c[:expected])
end
end
end
describe "+" do
cases <<-_
|value|addition|expected|
|"一" |"一" |2 |
|"二" |"一" |3 |
|"三" |"一" |4 |
|"四" |"一" |5 |
|"五" |"一" |6 |
|"六" |"一" |7 |
|"七" |"一" |8 |
|"八" |"一" |9 |
|"九" |"一" |10 |
|"十" |"一" |11 |
|"1" |"一" |"1一" |
|"" |"一" |"一" |
_
@cases.each do |c|
it "kansuji #{c[:value]} + kansuji #{c[:addition]} is number #{c[:expected]}" do
ret = c[:value] + c[:addition]
expect(ret).to eq(c[:expected])
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment