From f2e4c72efb03a10d402394a531fdc92e93159033 Mon Sep 17 00:00:00 2001 From: Julien Portalier Date: Sat, 23 Jan 2016 00:08:48 +0100 Subject: [PATCH] Fix: recursion when shard name doesn't match dependency name fixes #72 --- src/package.cr | 4 ++++ test/integration/install_test.cr | 12 ++++++++++++ test/support/cli.cr | 14 ++++++++++---- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/package.cr b/src/package.cr index 45d6f62e..ece978c2 100644 --- a/src/package.cr +++ b/src/package.cr @@ -98,6 +98,10 @@ module Shards self << package end + if dependency.name != package.spec.name + raise Error.new("Error shard name (#{package.spec.name}) doesn't match dependency name (#{dependency.name})") + end + package.requirements << dependency.version package end diff --git a/test/integration/install_test.cr b/test/integration/install_test.cr index 316a8644..355e33bc 100644 --- a/test/integration/install_test.cr +++ b/test/integration/install_test.cr @@ -224,4 +224,16 @@ class InstallCommandTest < Minitest::Test refute Dir.exists?(File.join(application_path, "libs", "fails")) end end + + def test_fails_when_shard_name_doesnt_match + metadata = { + dependencies: { + typo: { git: git_url(:mock), version: "*" } + } + } + with_shard(metadata) do + ex = assert_raises(FailedCommand) { run "shards install --no-color" } + assert_match "Error shard name (mock) doesn't match dependency name (typo)", ex.stdout + end + end end diff --git a/test/support/cli.cr b/test/support/cli.cr index 69bc935e..17cb5617 100644 --- a/test/support/cli.cr +++ b/test/support/cli.cr @@ -34,14 +34,20 @@ module Shards yml << "\n" value.each do |name, version| yml << " " << name << ":\n" - yml << " git: " << git_url(name).inspect << "\n" - if version.is_a?(String) + case version + when String + yml << " git: " << git_url(name).inspect << "\n" yml << " version: " << version.inspect << "\n" - elsif version + when Hash + unless version.keys.includes?(:git) + yml << " git: " << git_url(name).inspect << "\n" + end version.each do |k, v| - yml << " " << k << ": " << v << "\n" + yml << " " << k << ": " << v.inspect << "\n" end + else + yml << " git: " << git_url(name).inspect << "\n" end end else