From 82785686d93a18e78eb2411b7ee25309246c0b4e Mon Sep 17 00:00:00 2001 From: Kristen Kozak <grayjay@wordroute.com> Date: Sat, 11 Nov 2017 17:38:04 -0800 Subject: [PATCH] Add Exe goal qualifier to solver DSL. --- .../Distribution/Solver/Modular/DSL.hs | 12 +- .../Solver/Modular/DSL/TestCaseUtils.hs | 16 +-- .../Solver/Modular/MemoryUsage.hs | 4 +- .../Distribution/Solver/Modular/Solver.hs | 118 +++++++++--------- 4 files changed, 78 insertions(+), 72 deletions(-) diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/DSL.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/DSL.hs index 376f835c85..ef4d956986 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/DSL.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/DSL.hs @@ -210,13 +210,17 @@ data ExampleVar = | S ExampleQualifier ExamplePkgName OptionalStanza data ExampleQualifier = - None - | Indep ExamplePkgName - | Setup ExamplePkgName + QualNone + | QualIndep ExamplePkgName + | QualSetup ExamplePkgName -- The two package names are the build target and the package containing the -- setup script. - | IndepSetup ExamplePkgName ExamplePkgName + | QualIndepSetup ExamplePkgName ExamplePkgName + + -- The two package names are the package depending on the exe and the + -- package containing the exe. + | QualExe ExamplePkgName ExamplePkgName -- | Whether to enable tests in all packages in a test case. newtype EnableAllTests = EnableAllTests Bool diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/DSL/TestCaseUtils.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/DSL/TestCaseUtils.hs index 33fdbce40d..bc9fa32705 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/DSL/TestCaseUtils.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/DSL/TestCaseUtils.hs @@ -229,10 +229,12 @@ runTest SolverTest{..} = askOption $ \(OptionShowSolverLog showSolverLog) -> toQPN q pn = P.Q pp (C.mkPackageName pn) where pp = case q of - None -> P.PackagePath P.DefaultNamespace P.QualToplevel - Indep p -> P.PackagePath (P.Independent $ C.mkPackageName p) - P.QualToplevel - Setup s -> P.PackagePath P.DefaultNamespace - (P.QualSetup (C.mkPackageName s)) - IndepSetup p s -> P.PackagePath (P.Independent $ C.mkPackageName p) - (P.QualSetup (C.mkPackageName s)) + QualNone -> P.PackagePath P.DefaultNamespace P.QualToplevel + QualIndep p -> P.PackagePath (P.Independent $ C.mkPackageName p) + P.QualToplevel + QualSetup s -> P.PackagePath P.DefaultNamespace + (P.QualSetup (C.mkPackageName s)) + QualIndepSetup p s -> P.PackagePath (P.Independent $ C.mkPackageName p) + (P.QualSetup (C.mkPackageName s)) + QualExe p1 p2 -> P.PackagePath P.DefaultNamespace + (P.QualExe (C.mkPackageName p1) (C.mkPackageName p2)) diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/MemoryUsage.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/MemoryUsage.hs index df41cfe7c6..e953cb68eb 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/MemoryUsage.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/MemoryUsage.hs @@ -59,7 +59,7 @@ flagsTest name = flagName x = "flag-" ++ show x orderedFlags :: [ExampleVar] - orderedFlags = [F None "pkg" (flagName i) | i <- [1..n]] + orderedFlags = [F QualNone "pkg" (flagName i) | i <- [1..n]] -- | Test for a space leak caused by sharing of search trees under packages with -- link choices (issue #2899). @@ -94,4 +94,4 @@ issue2899 name = pkgName x = "pkg-" ++ show x goals :: [ExampleVar] - goals = [P None "setup-dep", P (Setup "target") "setup-dep"] + goals = [P QualNone "setup-dep", P (QualSetup "target") "setup-dep"] diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs index e9dd57e721..d19599997f 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs @@ -21,7 +21,7 @@ import Language.Haskell.Extension ( Extension(..) import Distribution.Solver.Types.Flag import Distribution.Solver.Types.OptionalStanza import Distribution.Solver.Types.PackageConstraint -import Distribution.Solver.Types.PackagePath +import qualified Distribution.Solver.Types.PackagePath as P import UnitTests.Distribution.Solver.Modular.DSL import UnitTests.Distribution.Solver.Modular.DSL.TestCaseUtils @@ -71,34 +71,34 @@ tests = [ ] , testGroup "Qualified manual flag constraints" [ let name = "Top-level flag constraint does not constrain setup dep's flag" - cs = [ExFlagConstraint (ScopeQualified QualToplevel "B") "flag" False] + cs = [ExFlagConstraint (ScopeQualified P.QualToplevel "B") "flag" False] in runTest $ constraints cs $ mkTest dbSetupDepWithManualFlag name ["A"] $ solverSuccess [ ("A", 1), ("B", 1), ("B", 2) , ("b-1-false-dep", 1), ("b-2-true-dep", 1) ] , let name = "Solver can toggle setup dep's flag to match top-level constraint" - cs = [ ExFlagConstraint (ScopeQualified QualToplevel "B") "flag" False + cs = [ ExFlagConstraint (ScopeQualified P.QualToplevel "B") "flag" False , ExVersionConstraint (ScopeAnyQualifier "b-2-true-dep") V.noVersion ] in runTest $ constraints cs $ mkTest dbSetupDepWithManualFlag name ["A"] $ solverSuccess [ ("A", 1), ("B", 1), ("B", 2) , ("b-1-false-dep", 1), ("b-2-false-dep", 1) ] , let name = "User can constrain flags separately with qualified constraints" - cs = [ ExFlagConstraint (ScopeQualified QualToplevel "B") "flag" True - , ExFlagConstraint (ScopeQualified (QualSetup "A") "B") "flag" False ] + cs = [ ExFlagConstraint (ScopeQualified P.QualToplevel "B") "flag" True + , ExFlagConstraint (ScopeQualified (P.QualSetup "A") "B") "flag" False ] in runTest $ constraints cs $ mkTest dbSetupDepWithManualFlag name ["A"] $ solverSuccess [ ("A", 1), ("B", 1), ("B", 2) , ("b-1-true-dep", 1), ("b-2-false-dep", 1) ] -- Regression test for #4299 , let name = "Solver can link deps when only one has constrained manual flag" - cs = [ExFlagConstraint (ScopeQualified QualToplevel "B") "flag" False] + cs = [ExFlagConstraint (ScopeQualified P.QualToplevel "B") "flag" False] in runTest $ constraints cs $ mkTest dbLinkedSetupDepWithManualFlag name ["A"] $ solverSuccess [ ("A", 1), ("B", 1), ("b-1-false-dep", 1) ] , let name = "Solver cannot link deps that have conflicting manual flag constraints" - cs = [ ExFlagConstraint (ScopeQualified QualToplevel "B") "flag" True - , ExFlagConstraint (ScopeQualified (QualSetup "A") "B") "flag" False ] + cs = [ ExFlagConstraint (ScopeQualified P.QualToplevel "B") "flag" True + , ExFlagConstraint (ScopeQualified (P.QualSetup "A") "B") "flag" False ] failureReason = "(constraint from unknown source requires opposite flag selection)" checkFullLog lns = all (\msg -> any (msg `isInfixOf`) lns) @@ -180,8 +180,8 @@ tests = [ mkTest dbConstraints "force older versions with unqualified constraint" ["A", "B", "C"] $ solverSuccess [("A", 1), ("B", 2), ("C", 3), ("D", 1), ("D", 2), ("D", 3)] - , let cs = [ ExVersionConstraint (ScopeQualified QualToplevel "D") $ mkVersionRange 1 4 - , ExVersionConstraint (ScopeQualified (QualSetup "B") "D") $ mkVersionRange 4 7 + , let cs = [ ExVersionConstraint (ScopeQualified P.QualToplevel "D") $ mkVersionRange 1 4 + , ExVersionConstraint (ScopeQualified (P.QualSetup "B") "D") $ mkVersionRange 4 7 ] in runTest $ constraints cs $ mkTest dbConstraints "force multiple versions with qualified constraints" ["A", "B", "C"] $ @@ -482,10 +482,10 @@ testTestSuiteWithFlag name = goals :: [ExampleVar] goals = [ - P None "B" - , P None "A" - , F None "A" "flag" - , S None "A" TestStanzas + P QualNone "B" + , P QualNone "A" + , F QualNone "A" "flag" + , S QualNone "A" TestStanzas ] -- Packages with setup dependencies @@ -673,9 +673,9 @@ testStanzaPreference name = [ExAny "unknown-pkg2"] []] goals = [ - P None "A" - , F None "A" "flag" - , S None "A" TestStanzas + P QualNone "A" + , F QualNone "A" "flag" + , S QualNone "A" TestStanzas ] in runTest $ goalOrder goals $ preferences [ ExStanzaPref "A" [TestStanzas]] $ @@ -750,7 +750,7 @@ testCyclicDependencyErrorMessages name = -- Solve for pkg-D and pkg-E last. goals :: [ExampleVar] - goals = [P None ("pkg-" ++ [c]) | c <- ['A'..'E']] + goals = [P QualNone ("pkg-" ++ [c]) | c <- ['A'..'E']] -- | Check that the solver can backtrack after encountering the SIR (issue #2843) -- @@ -810,14 +810,14 @@ testIndepGoals2 name = goals :: [ExampleVar] goals = [ - P (Indep "A") "A" - , P (Indep "A") "C" - , P (Indep "A") "D" - , P (Indep "B") "B" - , P (Indep "B") "C" - , P (Indep "B") "D" - , S (Indep "B") "B" TestStanzas - , S (Indep "A") "A" TestStanzas + P (QualIndep "A") "A" + , P (QualIndep "A") "C" + , P (QualIndep "A") "D" + , P (QualIndep "B") "B" + , P (QualIndep "B") "C" + , P (QualIndep "B") "D" + , S (QualIndep "B") "B" TestStanzas + , S (QualIndep "A") "A" TestStanzas ] -- | Issue #2834 @@ -894,16 +894,16 @@ testIndepGoals3 name = goals :: [ExampleVar] goals = [ - P (Indep "D") "D" - , P (Indep "D") "C" - , P (Indep "D") "A" - , P (Indep "E") "E" - , P (Indep "E") "C" - , P (Indep "E") "B" - , P (Indep "F") "F" - , P (Indep "F") "B" - , P (Indep "F") "C" - , P (Indep "F") "A" + P (QualIndep "D") "D" + , P (QualIndep "D") "C" + , P (QualIndep "D") "A" + , P (QualIndep "E") "E" + , P (QualIndep "E") "C" + , P (QualIndep "E") "B" + , P (QualIndep "F") "F" + , P (QualIndep "F") "B" + , P (QualIndep "F") "C" + , P (QualIndep "F") "A" ] -- | This test checks that the solver correctly backjumps when dependencies @@ -936,15 +936,15 @@ testIndepGoals4 name = goals :: [ExampleVar] goals = [ - P (Indep "A") "A" - , P (Indep "A") "E" - , P (Indep "B") "B" - , P (Indep "B") "D" - , P (Indep "B") "E" - , P (Indep "C") "C" - , P (Indep "C") "D" - , P (Indep "C") "E" - , S (Indep "C") "C" TestStanzas + P (QualIndep "A") "A" + , P (QualIndep "A") "E" + , P (QualIndep "B") "B" + , P (QualIndep "B") "D" + , P (QualIndep "B") "E" + , P (QualIndep "C") "C" + , P (QualIndep "C") "D" + , P (QualIndep "C") "E" + , S (QualIndep "C") "C" TestStanzas ] -- | Test the trace messages that we get when a package refers to an unknown pkg @@ -1013,14 +1013,14 @@ testIndepGoals5 name fixGoalOrder = goals :: [ExampleVar] goals = [ - P (Indep "X") "X" - , P (Indep "X") "A" - , P (Indep "X") "B" - , P (Indep "X") "C" - , P (Indep "Y") "Y" - , P (Indep "Y") "A" - , P (Indep "Y") "B" - , P (Indep "Y") "C" + P (QualIndep "X") "X" + , P (QualIndep "X") "A" + , P (QualIndep "X") "B" + , P (QualIndep "X") "C" + , P (QualIndep "Y") "Y" + , P (QualIndep "Y") "A" + , P (QualIndep "Y") "B" + , P (QualIndep "Y") "C" ] -- | A simplified version of 'testIndepGoals5'. @@ -1047,12 +1047,12 @@ testIndepGoals6 name fixGoalOrder = goals :: [ExampleVar] goals = [ - P (Indep "X") "X" - , P (Indep "X") "A" - , P (Indep "X") "B" - , P (Indep "Y") "Y" - , P (Indep "Y") "A" - , P (Indep "Y") "B" + P (QualIndep "X") "X" + , P (QualIndep "X") "A" + , P (QualIndep "X") "B" + , P (QualIndep "Y") "Y" + , P (QualIndep "Y") "A" + , P (QualIndep "Y") "B" ] dbExts1 :: ExampleDb -- GitLab