require File.expand_path(File.dirname(__FILE__) + '../../spec_helper')

module Owasp
  module Esapi
    module Codec
      describe OsCodec do
        let(:unix_codec) {Owasp::Esapi::Codec::OsCodec.new( Owasp::Esapi::Codec::OsCodec::UNIX_HOST)}
        let(:win_codec) {Owasp::Esapi::Codec::OsCodec.new( Owasp::Esapi::Codec::OsCodec::WINDOWS_HOST)}

        it "should detect the actual host os" do
          codec = Owasp::Esapi::Codec::OsCodec.new
          codec.os.should == Owasp::Esapi::Codec::OsCodec::UNIX_HOST
        end

        it "should decode ^< as < for windows" do
          win_codec.decode("^<").should == "<"
        end

        it "should decode \\< as < for unix" do
          unix_codec.decode("\\<").should == "<"
        end

        it "should encode c:\\jeff with ^ chars for windows" do
          win_codec.encode([],"C:\\jeff").should == "C^:^\\jeff"
        end

        it "should encode dir & foo with ^ chars for windows" do
          win_codec.encode([],"dir & foo").should == "dir^ ^&^ foo"

        end

        it "should encode c:\\jeff with \\ chars for unix" do
          unix_codec.encode(Owasp::Esapi::Encoder::CHAR_ALPHANUMERIC,"C:\\jeff").should == "C\\:\\\\jeff"
        end

        it "should encode dir & foo with \\ chars for unix" do
          unix_codec.encode([],"dir & foo").should == "dir\\ \\&\\ foo"
        end

        it "should encode /etc/hosts with \\ chars for unix" do
          unix_codec.encode(['-'],"/etc/hosts").should == "\\/etc\\/hosts"
        end

        it "should encode /etc/hosts; ls -l with \\ chars for unix" do
          unix_codec.encode(['-'],"/etc/hosts; ls -l").should == "\\/etc\\/hosts\\;\\ ls\\ -l"
        end

      end
    end
  end
end