class Test::Unit::Data::ClassMethods::Loader

def initialize(test_case)

Other tags:
    Api: - private
def initialize(test_case)
  @test_case = test_case
end

def load(file_name)

Other tags:
    Api: - private

Other tags:
    See: #load_tsv -
    See: #load_csv -

Raises:
  • (ArgumentError) - if `file_name` is not supported file format.

Parameters:
  • file_name (String) -- full path to test data file.
def load(file_name)
  case File.extname(file_name).downcase
  when ".csv"
    load_csv(file_name)
  when ".tsv"
    load_tsv(file_name)
  else
    raise ArgumentError, "unsupported file format: <#{file_name}>"
  end
end

def load_csv(file_name)

Other tags:
    Api: - private

Other tags:
    Example: Load data from CSV file without header -
    Example: Load data from CSV file with header -
def load_csv(file_name)
  require 'csv'
  first_row = true
  header = nil
  CSV.foreach(file_name) do |row|
    if first_row
      first_row = false
      if row.first == "label"
        header = row[1..-1]
        next
      end
    end
    set_test_data(header, row)
  end
end

def load_tsv(file_name)

Other tags:
    Api: - private

Other tags:
    Example: Load data from TSV file without header -
    Example: Load data from TSV file with header -
def load_tsv(file_name)
  require "csv"
  if CSV.const_defined?(:VERSION)
    first_row = true
    header = nil
    CSV.foreach(file_name, :col_sep => "\t") do |row|
      if first_row
        first_row = false
        if row.first == "label"
          header = row[1..-1]
          next
        end
      end
      set_test_data(header, row)
    end
  else
    # for old CSV library
    first_row = true
    header = nil
    CSV.open(file_name, "r", "\t") do |row|
      if first_row
        first_row = false
        if row.first == "label"
          header = row[1..-1]
          next
        end
      end
      set_test_data(header, row)
    end
  end
end

def normalize_value(value)

def normalize_value(value)
  return true if value == "true"
  return false if value == "false"
  begin
    Integer(value)
  rescue ArgumentError
    begin
      Float(value)
    rescue ArgumentError
      value
    end
  end
end

def set_test_data(header, row)

def set_test_data(header, row)
  label = row.shift
  if header
    data = {}
    header.each_with_index do |key, i|
      data[key] = normalize_value(row[i])
    end
  else
    data = row.collect do |cell|
      normalize_value(cell)
    end
  end
  @test_case.data(label, data)
end