Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .idea/.idea.DotNetLicenses/.idea/dictionaries/fried.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 16 additions & 10 deletions DotNetLicenses.TestFramework/NuGetMock.fs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ open TruePath

type MockedNuGetReader(licenseOverride: string option) =
interface INuGetReader with
member _.ReadNuSpec { PackageId = id; Version = version } = Task.FromResult {
member _.ReadNuSpec _ { PackageId = id; Version = version } = Task.FromResult <| Some {
Metadata = {
Id = id
Version = version
Expand All @@ -23,17 +23,23 @@ type MockedNuGetReader(licenseOverride: string option) =
}
}

member _.ContainsFileName _ _ = Task.FromResult true
member _.ReadPackageReferences(path: AbsolutePath) =
ReadPackageReferences(path, ReferenceType.PackageReference)

member _.ContainsFileName _ _ _ = Task.FromResult true

member _.FindFile _ packages _ = packages |> Seq.toArray |> Task.FromResult

let MirroringReader = MockedNuGetReader None

let WithNuGetPackageRoot (rootPath: AbsolutePath) (action: unit -> Task): Task = task {
let oldPath = PackagesFolderPath
try
PackagesFolderPath <- rootPath
do! action()
finally
PackagesFolderPath <- oldPath
}
type DirectNuSpecReader(packages: AbsolutePath) =
let parent = NuGetReader() :> INuGetReader
interface INuGetReader with
member _.ReadNuSpec _ coords = task {
let! nuSpec = GetNuSpecFilePath [| packages |] coords RootResolveBehavior.Any
let! result = ReadNuSpec(Option.get nuSpec)
return Some result
}
member _.ReadPackageReferences path = parent.ReadPackageReferences path
member _.ContainsFileName path name packages = parent.ContainsFileName path name packages
member _.FindFile path packages name = parent.FindFile path packages name
36 changes: 19 additions & 17 deletions DotNetLicenses.Tests/ConfigurationTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ let ``Metadata overrides are read correctly``(): Task =
metadata_sources = [{ type = "nuget", include = "File.csproj" }]
metadata_overrides = [
{ id = "Package1", version = "1.0.0", spdx = "MIT", copyright = "" },
{ id = "Package1", version = "2.0.0", spdx = ["MIT"], copyright = ["Copyright1"] }
{ id = "Package1", version = "2.0.0", spdx = "MIT", copyright = ["Copyright1"] }
]
"""
doTest content {
Expand All @@ -62,14 +62,14 @@ metadata_overrides = [
{
Id = "Package1"
Version = "1.0.0"
Spdx = [|"MIT"|]
Copyright = [|""|]
SpdxExpression = "MIT"
CopyrightNotices = [|""|]
}
{
Id = "Package1"
Version = "2.0.0"
Spdx = [|"MIT"|]
Copyright = [|"Copyright1"|]
SpdxExpression = "MIT"
CopyrightNotices = [|"Copyright1"|]
}
|]
}
Expand All @@ -86,14 +86,14 @@ metadata_sources = [
Configuration.Empty with
MetadataSources = [|
License {
Spdx = "MIT"
Copyright = "Me"
SpdxExpression = "MIT"
CopyrightNotice = "Me"
FilesCovered = [| LocalPathPattern "**/*.txt" |]
PatternsCovered = Array.empty
}
License {
Spdx = "MIT"
Copyright = "Me"
SpdxExpression = "MIT"
CopyrightNotice = "Me"
FilesCovered = [|
LocalPathPattern "**/*.pdf"
LocalPathPattern "**/*.pdb"
Expand Down Expand Up @@ -168,7 +168,8 @@ let ``Covered patterns are read correctly``(): Task =
let content = """
metadata_sources = [
{ type = "license", spdx = "MIT", copyright = "My Copyright", patterns_covered = [
{ type = "msbuild", include = "project2.csproj" },
{ type = "msbuild", include = "project1.csproj" },
{ type = "msbuild", include = "project2.csproj", runtime = "win-x64" },
{ type = "nuget" },
] },
{ type = "reuse", root = ".", patterns_covered = [
Expand All @@ -180,11 +181,12 @@ metadata_sources = [
Configuration.Empty with
MetadataSources = [|
License {
Spdx = "MIT"
Copyright = "My Copyright"
SpdxExpression = "MIT"
CopyrightNotice = "My Copyright"
FilesCovered = Array.empty
PatternsCovered = [|
MsBuildCoverage(LocalPath "project2.csproj")
MsBuildCoverage(LocalPath "project1.csproj", None)
MsBuildCoverage(LocalPath "project2.csproj", Some "win-x64")
NuGetCoverage
|]
}
Expand All @@ -193,7 +195,7 @@ metadata_sources = [
Exclude = Array.empty
FilesCovered = Array.empty
PatternsCovered = [|
MsBuildCoverage(LocalPath "project2.csproj")
MsBuildCoverage(LocalPath "project2.csproj", None)
|]
}
|]
Expand Down Expand Up @@ -222,8 +224,8 @@ metadata_overrides = [
let wp = WarningProcessor()
let overrides = configuration.GetMetadataOverrides wp
Assert.Equivalent(Map.ofArray [|
{ PackageId = "Package1"; Version = "1.0.0" }, { SpdxExpressions = [|"MIT"|]; Copyrights = [|""|] }
{ PackageId = "Package2"; Version = "1.0.0" }, { SpdxExpressions = [|"MIT"|]; Copyrights = [|"Copyright1"|] }
{ PackageId = "Package1"; Version = "1.0.0" }, { SpdxExpression = "MIT"; CopyrightNotices = [|""|] }
{ PackageId = "Package2"; Version = "1.0.0" }, { SpdxExpression = "MIT"; CopyrightNotices = [|"Copyright1"|] }
|], overrides)
Assert.Equivalent(WarningProcessor(), wp)
}
Expand All @@ -248,6 +250,6 @@ metadata_overrides = [
wp.Messages
)
Assert.Equivalent(Map.ofArray [|
{ PackageId = "Package1"; Version = "1.0.0" }, { SpdxExpressions = [|"MIT"|]; Copyrights = [|"Copyright1"|] }
{ PackageId = "Package1"; Version = "1.0.0" }, { SpdxExpression = "MIT"; CopyrightNotices = [|"Copyright1"|] }
|], result)
}
24 changes: 13 additions & 11 deletions DotNetLicenses.Tests/CoveragePatternTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

module DotNetLicenses.Tests.CoveragePatternTests

open System.Collections.Immutable
open System.IO
open System.Threading.Tasks
open DotNetLicenses
Expand All @@ -19,14 +20,15 @@ open Xunit
let ``MSBuild coverage pattern collector works``(): Task =
DataFiles.Deploy "Test.csproj" (fun project -> task {
let metadata = MetadataItem.License {
Spdx = "MIT"
Copyright = "2024 Me"
SpdxExpression = "MIT"
CopyrightNotice = "2024 Me"
FilesCovered = Array.empty
PatternsCovered = [| MsBuildCoverage(LocalPath project) |]
PatternsCovered = [| MsBuildCoverage(LocalPath project, None) |]
}

let! projectOutputs = MsBuild.GetGeneratedArtifacts project
let targetAssembly = projectOutputs.FilesWithContent |> Seq.head
let! projectOutputs = MsBuild.GetGeneratedArtifacts(project, None)
let files, _ = GeneratedArtifacts.Split projectOutputs
let targetAssembly = files |> Seq.head
let baseDirectory = targetAssembly.Parent.Value
Directory.CreateDirectory baseDirectory.Value |> ignore
do! File.WriteAllTextAsync(targetAssembly.Value, "test output")
Expand All @@ -52,8 +54,8 @@ let ``MSBuild coverage pattern collector works``(): Task =
Assert.Equal<_>([| LocalPathPattern sourceEntry.SourceRelativePath, {
LockFileItem.SourceId = None
SourceVersion = None
Spdx = [|"MIT"|]
Copyright = [|"2024 Me"|]
SpdxExpression = Some "MIT"
CopyrightNotices = ImmutableArray.Create "2024 Me"
IsIgnored = false
} |], result)
})
Expand All @@ -71,8 +73,8 @@ let ``NuGet coverage pattern collector works``(): Task = task {
do! File.WriteAllTextAsync(file.Value, "test output")

let metadata = MetadataItem.License {
Spdx = "MIT"
Copyright = "2024 Me"
SpdxExpression = "MIT"
CopyrightNotice = "2024 Me"
FilesCovered = Array.empty
PatternsCovered = [| NuGetCoverage |]
}
Expand Down Expand Up @@ -107,8 +109,8 @@ let ``NuGet coverage pattern collector works``(): Task = task {
Assert.Equal<_>([| pattern, {
LockFileItem.SourceId = None
SourceVersion = None
Spdx = [|"MIT"|]
Copyright = [|"2024 Me"|]
SpdxExpression = Some "MIT"
CopyrightNotices = ImmutableArray.Create "2024 Me"
IsIgnored = false
} |], result)
}
Expand Down
3 changes: 3 additions & 0 deletions DotNetLicenses.Tests/Data/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
using System;

Console.WriteLine("Hello World!");
9 changes: 9 additions & 0 deletions DotNetLicenses.Tests/Data/TestExe.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
33 changes: 17 additions & 16 deletions DotNetLicenses.Tests/LockFileTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
module DotNetLicenses.Tests.LockFileTests

open System.Collections.Generic
open System.Collections.Immutable
open System.IO
open System.Threading.Tasks
open DotNetLicenses.LockFile
Expand All @@ -17,8 +18,8 @@ let ``LockFile should be have expected format``(): Task =
let item id = {
LockFileItem.SourceId = Some id
SourceVersion = Some "1.0.0"
Spdx = [|"MIT"|]
Copyright = [|"none"|]
SpdxExpression = Some "MIT"
CopyrightNotices = ImmutableArray.Create "none"
IsIgnored = false
}
let data = [|
Expand All @@ -29,9 +30,9 @@ let ``LockFile should be have expected format``(): Task =
|]

let expectedContent = """# REUSE-IgnoreStart
"a.txt" = [{source_id = "a", source_version = "1.0.0", spdx = ["MIT"], copyright = ["none"]}]
"x.txt" = [{source_id = "a", source_version = "1.0.0", spdx = ["MIT"], copyright = ["none"]}, {source_id = "b", source_version = "1.0.0", spdx = ["MIT"], copyright = ["none"]}]
"y.txt" = [{source_id = "a", source_version = "1.0.0", spdx = ["MIT"], copyright = ["none"]}]
"a.txt" = [{source_id = "a", source_version = "1.0.0", spdx = "MIT", copyright = ["none"]}]
"x.txt" = [{source_id = "a", source_version = "1.0.0", spdx = "MIT", copyright = ["none"]}, {source_id = "b", source_version = "1.0.0", spdx = "MIT", copyright = ["none"]}]
"y.txt" = [{source_id = "a", source_version = "1.0.0", spdx = "MIT", copyright = ["none"]}]
# REUSE-IgnoreEnd
"""
task {
Expand All @@ -45,9 +46,9 @@ let ``LockFile should be have expected format``(): Task =
let ``LockFile is read correctly``(): Task = task {
use dir = DisposableDirectory.Create()
let content = """# REUSE-IgnoreStart
"a.txt" = [{source_id = "a", source_version = "1.0.0", spdx = ["MIT"], copyright = ["none"]}]
"x.txt" = [{source_id = "a", source_version = "1.0.0", spdx = ["MIT"], copyright = ["none"]}, {source_id = "b", source_version = "1.0.0", spdx = ["MIT"], copyright = ["none"]}]
"y.txt" = [{source_id = "a", source_version = "1.0.0", spdx = ["MIT"], copyright = ["none"]}]
"a.txt" = [{source_id = "a", source_version = "1.0.0", spdx = "MIT", copyright = ["none"]}]
"x.txt" = [{source_id = "a", source_version = "1.0.0", spdx = "MIT", copyright = ["none"]}, {source_id = "b", source_version = "1.0.0", spdx = "MIT", copyright = ["none"]}]
"y.txt" = [{source_id = "a", source_version = "1.0.0", spdx = "MIT", copyright = ["none"]}]
# REUSE-IgnoreEnd
"""
let filePath = dir.Path / "lock.toml"
Expand All @@ -59,8 +60,8 @@ let ``LockFile is read correctly``(): Task = task {
[|{
LockFileItem.SourceId = Some "a"
SourceVersion = Some "1.0.0"
Spdx = [|"MIT"|]
Copyright = [|"none"|]
SpdxExpression = Some "MIT"
CopyrightNotices = ImmutableArray.Create "none"
IsIgnored = false
}|]
)
Expand All @@ -70,15 +71,15 @@ let ``LockFile is read correctly``(): Task = task {
{
LockFileItem.SourceId = Some "a"
SourceVersion = Some "1.0.0"
Spdx = [|"MIT"|]
Copyright = [|"none"|]
SpdxExpression = Some "MIT"
CopyrightNotices = ImmutableArray.Create "none"
IsIgnored = false
};
{
LockFileItem.SourceId = Some "b"
SourceVersion = Some "1.0.0"
Spdx = [|"MIT"|]
Copyright = [|"none"|]
SpdxExpression = Some "MIT"
CopyrightNotices = ImmutableArray.Create "none"
IsIgnored = false
}
|]
Expand All @@ -88,8 +89,8 @@ let ``LockFile is read correctly``(): Task = task {
[|{
LockFileItem.SourceId = Some "a"
SourceVersion = Some "1.0.0"
Spdx = [|"MIT"|]
Copyright = [|"none"|]
SpdxExpression = Some "MIT"
CopyrightNotices = ImmutableArray.Create "none"
IsIgnored = false
}|]
)
Expand Down
45 changes: 31 additions & 14 deletions DotNetLicenses.Tests/MetadataTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

module DotNetLicenses.Tests.MetadataTests

open System.Collections.Immutable
open System.IO
open System.Threading.Tasks
open DotNetLicenses
open DotNetLicenses.Metadata
Expand All @@ -15,37 +17,52 @@ open Xunit

[<Fact>]
let ``Get metadata from .nuspec works correctly``(): Task = task {
let path = DataFiles.Get "Test1.nuspec"
let! nuSpec = ReadNuSpec path
let reference = {
use dir = DisposableDirectory.Create()
let sourceRoots = [| dir.Path |]
let coords = {
PackageId = "Package"
Version = "1.0.0"
}
let metadata = GetMetadata reference nuSpec
let nuSpec = DataFiles.Get "Test1.nuspec"
let! targetPath = GetNuSpecFilePath sourceRoots coords RootResolveBehavior.Any
let targetPath = Option.get targetPath
Directory.CreateDirectory(targetPath.Parent.Value.Value) |> ignore
File.Copy(nuSpec.Value, targetPath.Value)

let projectFile = dir.Path / "imaginative-file.csproj"
let reference = { ReferencingProject = projectFile; Coordinates = coords }
let nuGet = NuGetMock.DirectNuSpecReader(dir.Path)
let! metadata = GetMetadata projectFile nuGet reference
Assert.Equal(Some <| Package {|
Source = reference
Spdx = [|"MIT"|]
Copyrights = [|"© 2024 Friedrich von Never"|]
License = {
SpdxLicense.SpdxExpression = "MIT"
CopyrightNotices = ImmutableArray.Create "© 2024 Friedrich von Never"
}
|}, metadata)
}

[<Fact>]
let ``Overrides work as expected``(): Task = DataFiles.Deploy "TestComplex.csproj" (fun path -> task {
let reader = MetadataReader NuGetMock.MirroringReader
let! metadata = reader.ReadFromProject(path, Map.ofArray [|
{ PackageId = "FVNever.Package1"; Version = "0.0.0" }, { SpdxExpressions = [|"EXPR1"|]; Copyrights = [|"C1"|] }
{ PackageId = "FVNever.Package1"; Version = "1.0.0" }, { SpdxExpressions = [|"EXPR2"|]; Copyrights = [|"C2"|] }
{ PackageId = "FVNever.Package1"; Version = "0.0.0" }, { SpdxExpression = "EXPR1"; CopyrightNotices = [|"C1"|] }
{ PackageId = "FVNever.Package1"; Version = "1.0.0" }, { SpdxExpression = "EXPR2"; CopyrightNotices = [|"C2"|] }
|])
Assert.Equivalent([|
Package {|
Source = { PackageId = "FVNever.Package1"; Version = "0.0.0" }
Spdx = [|"EXPR1"|]
Copyrights = [|"C1"|]
Source = { ReferencingProject = path; Coordinates = { PackageId = "FVNever.Package1"; Version = "0.0.0" } }
License = {
SpdxLicense.SpdxExpression = "EXPR1"
CopyrightNotices = ImmutableArray.Create "C1"
}
|}
Package {|
Source = { PackageId = "FVNever.Package3"; Version = "0.0.0" }
Spdx = [|"License FVNever.Package3"|]
Copyrights = [|"Copyright FVNever.Package3"|]
Source = { ReferencingProject = path; Coordinates = { PackageId = "FVNever.Package3"; Version = "0.0.0" } }
License = {
SpdxLicense.SpdxExpression = "License FVNever.Package3"
CopyrightNotices = ImmutableArray.Create "Copyright FVNever.Package3"
}
|}
|], metadata.Items)
Assert.Equivalent([| { PackageId = "FVNever.Package1"; Version = "0.0.0" } |], metadata.UsedOverrides)
Expand Down
Loading