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 79 80
|
module Test
module Unit
module Data
class << self
def included(base)
base.extend(ClassMethods)
end
end
module ClassMethods
# TODO: WRITE ME.
def data(*arguments, &block)
n_arguments = arguments.size
case n_arguments
when 0
data_set = block
when 1
data_set = arguments[0]
when 2
data_set = {arguments[0] => arguments[1]}
else
message = "wrong number arguments(#{n_arguments} for 1..2)"
raise ArgumentError, message
end
current_data = current_attribute(:data)[:value] || []
attribute(:data, current_data + [data_set])
end
# TODO: WRITE ME.
def load_data(file_name)
case file_name
when /\.csv/i
loader = CSVDataLoader.new(self)
loader.load(file_name)
else
raise ArgumentError, "unsupported file format: <#{file_name}>"
end
end
class CSVDataLoader
def initialize(test_case)
@test_case = test_case
end
def load(file_name)
require 'csv'
header = nil
CSV.foreach(file_name) do |row|
if header.nil?
header = row
next
end
label = nil
data = {}
header.each_with_index do |key, i|
if key == "label"
label = row[i]
else
data[key] = normalize_value(row[i])
end
end
@test_case.data(label, data)
end
end
private
def normalize_value(value)
Integer(value)
rescue ArgumentError
begin
Float(value)
rescue ArgumentError
value
end
end
end
end
end
end
end
|