mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
* Add binary classifier for swipl Signed-off-by: Laurent Goderre <laurent.goderre@docker.com> * Added cataloger for SWI Prolog Pack packages Signed-off-by: Laurent Goderre <laurent.goderre@docker.com> --------- Signed-off-by: Laurent Goderre <laurent.goderre@docker.com>
268 lines
4.1 KiB
Go
268 lines
4.1 KiB
Go
package pkg
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/scylladb/go-set/strset"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestLanguageFromPURL(t *testing.T) {
|
|
|
|
tests := []struct {
|
|
purl string
|
|
want Language
|
|
}{
|
|
|
|
{
|
|
purl: "pkg:npm/util@2.32",
|
|
want: JavaScript,
|
|
},
|
|
{
|
|
purl: "pkg:pypi/util-linux@2.32.1-27.el8",
|
|
want: Python,
|
|
},
|
|
{
|
|
purl: "pkg:gem/ruby-advisory-db-check@0.12.4",
|
|
want: Ruby,
|
|
},
|
|
{
|
|
purl: "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c",
|
|
want: Go,
|
|
},
|
|
{
|
|
purl: "pkg:pub/util@1.2.34",
|
|
want: Dart,
|
|
},
|
|
{
|
|
purl: "pkg:dotnet/Microsoft.CodeAnalysis.Razor@2.2.0",
|
|
want: Dotnet,
|
|
},
|
|
{
|
|
purl: "pkg:nuget/Newtonsoft.Json@13.0.0",
|
|
want: Dotnet,
|
|
},
|
|
{
|
|
purl: "pkg:cargo/clap@2.33.0",
|
|
want: Rust,
|
|
},
|
|
{
|
|
purl: "pkg:composer/laravel/laravel@5.5.0",
|
|
want: PHP,
|
|
},
|
|
{
|
|
purl: "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=zip&classifier=dist",
|
|
want: Java,
|
|
},
|
|
{
|
|
purl: "pkg:cocoapods/GlossButtonNode@3.1.2",
|
|
want: Swift,
|
|
},
|
|
{
|
|
purl: "pkg:conan/catch2@2.13.8",
|
|
want: CPP,
|
|
},
|
|
{
|
|
purl: "pkg:hackage/HTTP@4000.3.16",
|
|
want: Haskell,
|
|
},
|
|
{
|
|
purl: "pkg:hex/hpax/hpax@0.1.1",
|
|
want: UnknownLanguage,
|
|
},
|
|
{
|
|
purl: "pkg:cran/base@4.3.0",
|
|
want: R,
|
|
},
|
|
{
|
|
purl: "pkg:swift/github.com/apple/swift-numerics/swift-numerics@1.0.2",
|
|
want: Swift,
|
|
},
|
|
{
|
|
purl: "pkg:swiplpack/conditon@0.1.1",
|
|
want: Swipl,
|
|
},
|
|
{
|
|
purl: "pkg:luarocks/kong@3.7.0",
|
|
want: Lua,
|
|
},
|
|
}
|
|
|
|
var languages = strset.New()
|
|
var expectedLanguages = strset.New()
|
|
for _, ty := range AllLanguages {
|
|
expectedLanguages.Add(string(ty))
|
|
}
|
|
|
|
// we cannot determine the language from these purl ecosystems (yet?)
|
|
expectedLanguages.Remove(Elixir.String())
|
|
expectedLanguages.Remove(Erlang.String())
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.purl, func(t *testing.T) {
|
|
actual := LanguageFromPURL(tt.purl)
|
|
|
|
if actual != "" {
|
|
languages.Add(string(actual))
|
|
}
|
|
|
|
assert.Equalf(t, tt.want, actual, "LanguageFromPURL(%v)", tt.purl)
|
|
})
|
|
}
|
|
|
|
assert.ElementsMatch(t, expectedLanguages.List(), languages.List(), "missing one or more languages to test against (maybe a package type was added?)")
|
|
|
|
}
|
|
|
|
func TestLanguageByName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
language Language
|
|
}{
|
|
{
|
|
name: "maven",
|
|
language: Java,
|
|
},
|
|
{
|
|
name: "java",
|
|
language: Java,
|
|
},
|
|
{
|
|
name: "java-archive",
|
|
language: Java,
|
|
},
|
|
{
|
|
name: "java",
|
|
language: Java,
|
|
},
|
|
{
|
|
name: "composer",
|
|
language: PHP,
|
|
},
|
|
{
|
|
name: "php-composer",
|
|
language: PHP,
|
|
},
|
|
{
|
|
name: "php",
|
|
language: PHP,
|
|
},
|
|
{
|
|
name: "go",
|
|
language: Go,
|
|
},
|
|
{
|
|
name: "golang",
|
|
language: Go,
|
|
},
|
|
{
|
|
name: "go-module",
|
|
language: Go,
|
|
},
|
|
{
|
|
name: "npm",
|
|
language: JavaScript,
|
|
},
|
|
{
|
|
name: "javascript",
|
|
language: JavaScript,
|
|
},
|
|
{
|
|
name: "node.js",
|
|
language: JavaScript,
|
|
},
|
|
{
|
|
name: "nodejs",
|
|
language: JavaScript,
|
|
},
|
|
{
|
|
name: "pypi",
|
|
language: Python,
|
|
},
|
|
{
|
|
name: "python",
|
|
language: Python,
|
|
},
|
|
{
|
|
name: "gem",
|
|
language: Ruby,
|
|
},
|
|
{
|
|
name: "ruby",
|
|
language: Ruby,
|
|
},
|
|
{
|
|
name: "rust",
|
|
language: Rust,
|
|
},
|
|
{
|
|
name: "rust-crate",
|
|
language: Rust,
|
|
},
|
|
{
|
|
name: "cargo",
|
|
language: Rust,
|
|
},
|
|
{
|
|
name: "dart",
|
|
language: Dart,
|
|
},
|
|
{
|
|
name: "dart-pub",
|
|
language: Dart,
|
|
},
|
|
{
|
|
name: "pub",
|
|
language: Dart,
|
|
},
|
|
{
|
|
name: "dotnet",
|
|
language: Dotnet,
|
|
},
|
|
{
|
|
name: "swift",
|
|
language: Swift,
|
|
},
|
|
{
|
|
name: "swiplpack",
|
|
language: Swipl,
|
|
},
|
|
{
|
|
name: "pod",
|
|
language: Swift,
|
|
},
|
|
{
|
|
name: "cocoapods",
|
|
language: Swift,
|
|
},
|
|
{
|
|
name: "unknown",
|
|
language: UnknownLanguage,
|
|
},
|
|
{
|
|
name: "conan",
|
|
language: CPP,
|
|
},
|
|
{
|
|
name: "c++",
|
|
language: CPP,
|
|
},
|
|
{
|
|
name: "hackage",
|
|
language: Haskell,
|
|
},
|
|
{
|
|
name: "haskell",
|
|
language: Haskell,
|
|
},
|
|
{
|
|
name: "R",
|
|
language: R,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
assert.Equal(t, LanguageByName(test.name), test.language)
|
|
}
|
|
}
|