github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/buildtools/cabal/cabal_test.go (about) 1 package cabal_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 8 "github.com/fossas/fossa-cli/buildtools/cabal" 9 "github.com/fossas/fossa-cli/pkg" 10 ) 11 12 func TestAnalyzeCabalPure(t *testing.T) { 13 // Basic test with an input that hits all of the edge-cases: 14 // - pre-existing libraries 15 // - dependencies within components 16 // - dependencies at the top level 17 input := cabal.Plan{ 18 InstallPlans: []cabal.InstallPlan{ 19 { 20 Type: "configured", 21 Id: "pckg-n-0.0.1.0", 22 Name: "package-one", 23 Version: "0.0.1.0", 24 25 Components: map[string]cabal.Component{ 26 "lib": { 27 Depends: []string{"pckg-tw-0.0.1.0"}, 28 }, 29 }, 30 Style: "global", 31 }, 32 { 33 Type: "configured", 34 Id: "pckg-tw-0.0.1.0", 35 Name: "package-two", 36 Version: "0.0.1.0", 37 38 Depends: []string{"pkcg-thr-0.0.1.0", "pkcg-fr-0.0.1.0"}, 39 Style: "local", 40 }, 41 { 42 Type: "pre-existing", 43 Id: "pkcg-thr-0.0.1.0", 44 Name: "package-three", 45 Version: "0.0.1.0", 46 47 Depends: []string{"pkcg-fr-0.0.1.0"}, 48 }, 49 { 50 Type: "configured", 51 Id: "pkcg-fr-0.0.1.0", 52 Name: "package-four", 53 Version: "0.0.1.0", 54 55 Depends: []string{}, 56 Style: "global", 57 }, 58 }, 59 } 60 61 // Shared model example -- when modifying this, also modify in stack_test.go 62 deps := cabal.GetDepsPure(input) 63 64 packageOne := pkg.ID{ 65 Type: pkg.Haskell, 66 Name: "package-one", 67 Revision: "0.0.1.0", 68 } 69 packageTwo := pkg.ID{ 70 Type: pkg.Haskell, 71 Name: "package-two", 72 Revision: "0.0.1.0", 73 } 74 packageThree := pkg.ID{ 75 Type: pkg.Haskell, 76 Name: "package-three", 77 Revision: "0.0.1.0", 78 } 79 packageFour := pkg.ID{ 80 Type: pkg.Haskell, 81 Name: "package-four", 82 Revision: "0.0.1.0", 83 } 84 85 assert.Len(t, deps.Direct, 2) 86 assert.Contains(t, deps.Direct, pkg.Import{Resolved: packageThree}) 87 assert.Contains(t, deps.Direct, pkg.Import{Resolved: packageFour}) 88 89 assert.Len(t, deps.Transitive, 4) 90 91 assert.Contains(t, deps.Transitive, packageOne) 92 assert.Len(t, deps.Transitive[packageOne].Imports, 1) 93 assert.Contains(t, deps.Transitive[packageOne].Imports, pkg.Import{Resolved: packageTwo}) 94 95 assert.Contains(t, deps.Transitive, packageTwo) 96 assert.Len(t, deps.Transitive[packageTwo].Imports, 2) 97 assert.Contains(t, deps.Transitive[packageTwo].Imports, pkg.Import{Resolved: packageThree}) 98 assert.Contains(t, deps.Transitive[packageTwo].Imports, pkg.Import{Resolved: packageFour}) 99 100 assert.Contains(t, deps.Transitive, packageThree) 101 assert.Len(t, deps.Transitive[packageThree].Imports, 1) 102 assert.Contains(t, deps.Transitive[packageThree].Imports, pkg.Import{Resolved: packageFour}) 103 104 assert.Contains(t, deps.Transitive, packageFour) 105 assert.Len(t, deps.Transitive[packageFour].Imports, 0) 106 }