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  }