faster_path 0.0.2

Alternative to Pathname
Documentation
require 'test_helper'

class ExtnameTest < Minitest::Test
  def test_nil_inputs
    assert_nil FasterPath.extname(nil)
  end

  def test_extname
    assert_equal ".rb", FasterPath.extname("foo.rb")
    assert_equal ".rb", FasterPath.extname("/foo/bar.rb")
    assert_equal ".c", FasterPath.extname("/foo.rb/bar.c")
    assert_equal "", FasterPath.extname("bar")
    assert_equal "", FasterPath.extname(".bashrc")
    assert_equal "", FasterPath.extname("./foo.bar/baz")
    assert_equal ".conf", FasterPath.extname(".app.conf")
  end

  def test_extname_edge_cases
    assert_equal "", FasterPath.extname("")
    assert_equal "", FasterPath.extname(".")
    assert_equal "", FasterPath.extname("/")
    assert_equal "", FasterPath.extname("/.")
    assert_equal "", FasterPath.extname("..")
    assert_equal "", FasterPath.extname("...")
    assert_equal "", FasterPath.extname("....")
    assert_equal "", FasterPath.extname(".foo.")
    assert_equal "", FasterPath.extname("foo.")
    assert_equal "", FasterPath.extname("..foo")
  end

  def test_substitutability_of_rust_and_ruby_impls
    result_pair = lambda do |str|
      [
          File.send(:extname, str),
          FasterPath.extname(str)
      ]
    end
    assert_equal( *result_pair.("foo.rb")                    )
    assert_equal( *result_pair.("/foo/bar.rb")               )
    assert_equal( *result_pair.("/foo.rb/bar.c")             )
    assert_equal( *result_pair.("bar")                       )
    assert_equal( *result_pair.(".bashrc")                   )
    assert_equal( *result_pair.("./foo.bar/baz")             )
    assert_equal( *result_pair.(".app.conf")                 )
    assert_equal( *result_pair.("")                          )
    assert_equal( *result_pair.(".")                         )
    assert_equal( *result_pair.("/")                         )
    assert_equal( *result_pair.("/.")                        )
    assert_equal( *result_pair.("..")                        )
    assert_equal( *result_pair.("...")                       )
    assert_equal( *result_pair.("....")                      )
    assert_equal( *result_pair.(".foo.")                     )
    assert_equal( *result_pair.("foo.")                      )
    assert_equal( *result_pair.("foo.rb/")                   )
    assert_equal( *result_pair.("foo.rb//")                  )
  end
end