From 6f0d6eb0b2855c5f3483213b0c6edbd25d3621d5 Mon Sep 17 00:00:00 2001 From: orkamara Date: Tue, 29 Oct 2019 10:53:20 +0200 Subject: [PATCH] fix: don't fail when there are no dependencies --- lib/nuget-parser/dotnet-core-parser.ts | 14 +++--- test/csproj.test.ts | 8 ++++ .../no-dependencies/csproj_no_deps.csproj | 7 +++ .../no-dependencies/obj/project.assets.json | 47 +++++++++++++++++++ 4 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 test/stubs/target_framework/no-dependencies/csproj_no_deps.csproj create mode 100644 test/stubs/target_framework/no-dependencies/obj/project.assets.json diff --git a/lib/nuget-parser/dotnet-core-parser.ts b/lib/nuget-parser/dotnet-core-parser.ts index c1b5643e..6cf1809c 100644 --- a/lib/nuget-parser/dotnet-core-parser.ts +++ b/lib/nuget-parser/dotnet-core-parser.ts @@ -125,11 +125,13 @@ function constructTree(roots: string[], nodes: Dependency[], links: DepLink[]) { const tree = _.pick(treeMap, roots); const freqSysDeps = _.pick(treeMap, Object.keys(freqDeps)); - tree['freqSystemDependencies'] = { - name: 'freqSystemDependencies', - version: '0.0.0', - dependencies: freqSysDeps - }; + if (!_.isEmpty(freqSysDeps)) { + tree['freqSystemDependencies'] = { + name: 'freqSystemDependencies', + version: '0.0.0', + dependencies: freqSysDeps + }; + } return tree; } @@ -197,7 +199,7 @@ export async function parse(tree, manifest) { initFreqDepsDict(); - const directDependencies = collectFlatList(selectedFrameworkObj.dependencies); + const directDependencies = selectedFrameworkObj.dependencies ? collectFlatList(selectedFrameworkObj.dependencies) : []; debug(`directDependencies: '${directDependencies}'`); tree.dependencies = buildBfsTree(selectedTargetObj, directDependencies); diff --git a/test/csproj.test.ts b/test/csproj.test.ts index 76fa4fb4..aab2be84 100644 --- a/test/csproj.test.ts +++ b/test/csproj.test.ts @@ -1,3 +1,5 @@ +import * as _ from 'lodash'; + import * as tap from 'tap'; const test = tap.test; import * as plugin from '../lib/index'; @@ -6,6 +8,7 @@ import {getTargetFrameworksFromProjFile} from '../lib/nuget-parser/csproj-parser const multipleFrameworksPath = './test/stubs/target_framework/csproj_multiple/'; const noProjectPath = './test/stubs/target_framework/no_csproj/'; const noValidFrameworksPath = './test/stubs/target_framework/no_target_valid_framework'; +const noDeps = './test/stubs/target_framework/no-dependencies/'; const manifestFile = 'obj/project.assets.json'; test('parse dotnet with csproj containing multiple versions retrieves first one', async (t) => { @@ -20,6 +23,11 @@ test('parse dotnet with vbproj', async (t) => { t.equal(res.plugin.targetRuntime, 'netcoreapp2.0'); }); +test('parse dotnet with no deps', async (t) => { + const res = await plugin.inspect(noDeps, manifestFile); + t.equal(_.isEmpty(res.package.dependencies), true); +}); + test('parse dotnet with no valid framework defined', async (t) => { try { await plugin.inspect(noValidFrameworksPath, manifestFile); diff --git a/test/stubs/target_framework/no-dependencies/csproj_no_deps.csproj b/test/stubs/target_framework/no-dependencies/csproj_no_deps.csproj new file mode 100644 index 00000000..77032545 --- /dev/null +++ b/test/stubs/target_framework/no-dependencies/csproj_no_deps.csproj @@ -0,0 +1,7 @@ + + + + net472 + + + diff --git a/test/stubs/target_framework/no-dependencies/obj/project.assets.json b/test/stubs/target_framework/no-dependencies/obj/project.assets.json new file mode 100644 index 00000000..a2f39ece --- /dev/null +++ b/test/stubs/target_framework/no-dependencies/obj/project.assets.json @@ -0,0 +1,47 @@ +{ + "version": 3, + "targets": { + ".NETFramework,Version=v4.7.2": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + ".NETFramework,Version=v4.7.2": [] + }, + "packageFolders": { + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\ma\\csproj_no_deps.csproj", + "projectName": "csproj_no_deps", + "projectPath": "C:\\Users\\ma\\csproj_no_deps.csproj", + "packagesPath": "C:\\Users\\ma\\.nuget\\packages\\", + "outputPath": "C:\\Users\\ma\\obj", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "originalTargetFrameworks": [ + "net472" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net472": { + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net472": {} + } + } +} \ No newline at end of file