require_relative '../../spec_helper'

# TODO: migrate these to constants/constants_spec.rb

describe "File::Constants" do
  it "matches mode constants" do
    File::FNM_NOESCAPE.should_not == nil
    File::FNM_PATHNAME.should_not == nil
    File::FNM_DOTMATCH.should_not == nil
    File::FNM_CASEFOLD.should_not == nil
    File::FNM_SYSCASE.should_not == nil

    platform_is :windows do #|| VMS
      File::FNM_SYSCASE.should == 8
    end
  end

  # Only these constants are not inherited from the IO class
  it "the separator constant" do
    File::SEPARATOR.should_not == nil
    File::Separator.should_not == nil
    File::PATH_SEPARATOR.should_not == nil
    File::SEPARATOR.should == "/"

    platform_is :windows do #|| VMS
      File::ALT_SEPARATOR.should_not == nil
      File::PATH_SEPARATOR.should == ";"
    end

    platform_is_not :windows do
      File::ALT_SEPARATOR.should == nil
      File::PATH_SEPARATOR.should == ":"
    end
  end

  it "the open mode constants" do
    File::APPEND.should_not == nil
    File::CREAT.should_not == nil
    File::EXCL.should_not == nil
    File::NONBLOCK.should_not == nil
    File::RDONLY.should_not == nil
    File::RDWR.should_not == nil
    File::TRUNC.should_not == nil
    File::WRONLY.should_not == nil

    platform_is_not :windows do # Not sure about VMS here
      File::NOCTTY.should_not == nil
    end
  end

  it "lock mode constants" do
    File::LOCK_EX.should_not == nil
    File::LOCK_NB.should_not == nil
    File::LOCK_SH.should_not == nil
    File::LOCK_UN.should_not == nil
  end
end

describe "File::Constants" do
  # These mode and permission bits are platform dependent
  it "File::RDONLY" do
    defined?(File::RDONLY).should == "constant"
  end

  it "File::WRONLY" do
    defined?(File::WRONLY).should == "constant"
  end

  it "File::CREAT" do
    defined?(File::CREAT).should == "constant"
  end

  it "File::RDWR" do
    defined?(File::RDWR).should == "constant"
  end

  it "File::APPEND" do
    defined?(File::APPEND).should == "constant"
  end

  it "File::TRUNC" do
    defined?(File::TRUNC).should == "constant"
  end

  platform_is_not :windows do # Not sure about VMS here
    it "File::NOCTTY" do
      defined?(File::NOCTTY).should == "constant"
    end
  end

  it "File::NONBLOCK" do
    defined?(File::NONBLOCK).should == "constant"
  end

  it "File::LOCK_EX" do
    defined?(File::LOCK_EX).should == "constant"
  end

  it "File::LOCK_NB" do
    defined?(File::LOCK_NB).should == "constant"
  end

  it "File::LOCK_SH" do
    defined?(File::LOCK_SH).should == "constant"
  end

  it "File::LOCK_UN" do
    defined?(File::LOCK_UN).should == "constant"
  end

  it "File::SEPARATOR" do
    defined?(File::SEPARATOR).should == "constant"
  end
  it "File::Separator" do
    defined?(File::Separator).should == "constant"
  end

  it "File::PATH_SEPARATOR" do
    defined?(File::PATH_SEPARATOR).should == "constant"
  end

  it "File::SEPARATOR" do
    defined?(File::SEPARATOR).should == "constant"
    File::SEPARATOR.should == "/"
  end

  platform_is :windows do #|| VMS
    it "File::ALT_SEPARATOR" do
      defined?(File::ALT_SEPARATOR).should == "constant"
      File::PATH_SEPARATOR.should == ";"
    end
  end

  platform_is_not :windows do
    it "File::PATH_SEPARATOR" do
      defined?(File::PATH_SEPARATOR).should == "constant"
      File::PATH_SEPARATOR.should == ":"
    end
  end

end
