# -*- Encoding: utf-8 -*-
#
# Copyright 2013 whiteleaf. All rights reserved.
#

require_relative "../lib/ini"

data_test_ini_path = File.expand_path(File.dirname(__FILE__) + "/data/test.ini")

describe Ini, "#cast" do
  before do
    @ini = Ini.new
  end

  it "class type should be Fixnum" do
    @ini.cast("100").class.should == Fixnum
  end

  it "return 100" do
    @ini.cast("100").should == 100
  end

  it "return 100" do
    @ini.cast("+100").should == 100
  end

  it "return -100" do
    @ini.cast("-100").should == -100
  end

  it "class type should be Float" do
    @ini.cast("10.5").class.should == Float
  end

  it "return 10.5" do
    @ini.cast("10.5").should == 10.5
  end

  it "return +10.5" do
    @ini.cast("+10.5").should == 10.5
  end

  it "return -10.5" do
    @ini.cast("-10.5").should == -10.5
  end

  it "return true" do
    @ini.cast("true").should == true
  end

  it "return false" do
    @ini.cast("false").should == false
  end

  it "return `string'" do
    @ini.cast("string").should == "string"
  end

  it "return `string'" do
    @ini.cast("'string'").should == "string"
  end

  it "return `string'" do
    @ini.cast('"string"').should == "string"
  end

  it "return nil" do
    @ini.cast("nil").should == nil
  end

  it "return nil" do
    @ini.cast("null").should == nil
  end

  it "empty string cast to nil" do
    @ini.cast("null").should == nil
  end
end

describe Ini, "を初期化した場合:" do
  describe 'new("") した時' do
    before do
      @ini = Ini.new
    end

    it "は global セクションだけがあること" do
      @ini.object.count.should == 1
      @ini.object.include?("global").should be_true
    end

    it "の global セクションは空のハッシュだけであること" do
      @ini.object["global"].empty?.should be_true
    end
  end
end

describe "test.ini" do
  before do
    @ini_data = Ini.load_file(data_test_ini_path)
  end

  it "は Hash であること" do
    @ini_data.class.should == Hash
  end

  it "はセクションが2つであること" do
    @ini_data.count.should == 2
  end

  it "はglobalセクションが必ずあること" do
    @ini_data.include?("global").should be_true
  end

  it "はsub_sectionがあること" do
    @ini_data.include?("sub_section").should be_true
  end

  it "は global_string が 文字列 という文字であること" do
    @ini_data["global"]["global_string"].should == "文字列"
  end

  it "は true_value が true であること" do
    @ini_data["sub_section"]["true_value"].should == true
  end

  it "は false_value が false であること" do
    @ini_data["sub_section"]["false_value"].should == false
  end

  it "は nil_value_1 が nil であること" do
    @ini_data["sub_section"]["nil_value_1"].should == nil
  end

  it "は nil_value_2 が nil であること" do
    @ini_data["sub_section"]["nil_value_2"].should == nil
  end

  it "は number が 100 であること" do
    @ini_data["sub_section"]["number"].should == 100
  end

  it 'は quote_string が 囲まれた文字列 であること' do
    @ini_data["sub_section"]["quote_string"].should == '囲まれた文字列'
  end
end