mirror of
https://github.com/joshuaclayton/unused.git
synced 2024-10-26 13:19:58 +03:00
fde9f69a64
This uses the file-embed package and TemplateHaskell to load custom configuration during compilation instead of loading it at runtime.
64 lines
2.7 KiB
Haskell
64 lines
2.7 KiB
Haskell
module Unused.LikelihoodCalculatorSpec
|
|
( main
|
|
, spec
|
|
) where
|
|
|
|
import Test.Hspec
|
|
import Unused.LikelihoodCalculator
|
|
import Unused.ResultsClassifier
|
|
import Unused.Types
|
|
|
|
main :: IO ()
|
|
main = hspec spec
|
|
|
|
spec :: Spec
|
|
spec = parallel $
|
|
describe "calculateLikelihood" $ do
|
|
it "prefers language-specific checks first" $ do
|
|
let railsMatches = [ TermMatch "ApplicationController" "app/controllers/application_controller.rb" Nothing 1 ]
|
|
removalLikelihood' railsMatches `shouldBe` Low
|
|
|
|
let elixirMatches = [ TermMatch "AwesomeView" "web/views/awesome_view.ex" Nothing 1 ]
|
|
removalLikelihood' elixirMatches `shouldBe` Low
|
|
|
|
it "weighs widely-used methods as low likelihood" $ do
|
|
let matches = [ TermMatch "full_name" "app/models/user.rb" Nothing 4
|
|
, TermMatch "full_name" "app/views/application/_auth_header.rb" Nothing 1
|
|
, TermMatch "full_name" "app/mailers/user_mailer.rb" Nothing 1
|
|
, TermMatch "full_name" "spec/models/user_spec.rb" Nothing 10
|
|
]
|
|
|
|
removalLikelihood' matches `shouldBe` Low
|
|
|
|
it "weighs only-occurs-once methods as high likelihood" $ do
|
|
let matches = [ TermMatch "obscure_method" "app/models/user.rb" Nothing 1 ]
|
|
|
|
removalLikelihood' matches `shouldBe` High
|
|
|
|
it "weighs methods that seem to only be tested and never used as high likelihood" $ do
|
|
let matches = [ TermMatch "obscure_method" "app/models/user.rb" Nothing 1
|
|
, TermMatch "obscure_method" "spec/models/user_spec.rb" Nothing 5
|
|
]
|
|
|
|
removalLikelihood' matches `shouldBe` High
|
|
|
|
it "weighs methods that seem to only be tested and used in one other area as medium likelihood" $ do
|
|
let matches = [ TermMatch "obscure_method" "app/models/user.rb" Nothing 1
|
|
, TermMatch "obscure_method" "app/controllers/user_controller.rb" Nothing 1
|
|
, TermMatch "obscure_method" "spec/models/user_spec.rb" Nothing 5
|
|
, TermMatch "obscure_method" "spec/controllers/user_controller_spec.rb" Nothing 5
|
|
]
|
|
|
|
removalLikelihood' matches `shouldBe` Medium
|
|
|
|
it "doesn't mis-categorize allowed terms from different languages" $ do
|
|
let matches = [ TermMatch "t" "web/models/foo.ex" Nothing 1 ]
|
|
|
|
removalLikelihood' matches `shouldBe` High
|
|
|
|
removalLikelihood' :: [TermMatch] -> RemovalLikelihood
|
|
removalLikelihood' =
|
|
rLikelihood . trRemoval . calculateLikelihood config . resultsFromMatches
|
|
where
|
|
(Right config) = loadConfig
|