aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMarkus Reiter2017-10-08 16:07:09 +0200
committerGitHub2017-10-08 16:07:09 +0200
commit91ab116ace7f4f97d3440190463c93be9ec6d675 (patch)
tree5d37c3b89d97370c53f7ab8f847b35071a672dcf /Library
parentc56a968128f13eab903110503ee98e50a44132c6 (diff)
parentefbc1b0cb489ccc35110b4013145ded2abd3e03f (diff)
downloadbrew-91ab116ace7f4f97d3440190463c93be9ec6d675.tar.bz2
Merge pull request #3289 from reitermarkus/cask-loader1.3.5
Fix regexes in `CaskLoader`.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/cask/lib/hbc/cask_loader.rb23
-rw-r--r--Library/Homebrew/test/cask/cask_loader/from_content_loader_spec.rb57
-rw-r--r--Library/Homebrew/test/cask/cask_loader/from_uri_loader_spec.rb21
3 files changed, 93 insertions, 8 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/cask_loader.rb b/Library/Homebrew/cask/lib/hbc/cask_loader.rb
index 5660992da..08d457643 100644
--- a/Library/Homebrew/cask/lib/hbc/cask_loader.rb
+++ b/Library/Homebrew/cask/lib/hbc/cask_loader.rb
@@ -3,6 +3,18 @@ module Hbc
class FromContentLoader
attr_reader :content
+ def self.can_load?(ref)
+ return false unless ref.respond_to?(:to_str)
+ content = ref.to_str
+
+ token = /(?:"[^"]*"|'[^']*')/
+ curly = /\(\s*#{token}\s*\)\s*\{.*\}/
+ do_end = /\s+#{token}\s+do(?:\s*;\s*|\s+).*end/
+ regex = /\A\s*cask(?:#{curly.source}|#{do_end.source})\s*\Z/m
+
+ content.match?(regex)
+ end
+
def initialize(content)
@content = content
end
@@ -56,7 +68,8 @@ module Hbc
class FromURILoader < FromPathLoader
def self.can_load?(ref)
- ref.to_s.match?(::URI::DEFAULT_PARSER.make_regexp)
+ uri_regex = ::URI::DEFAULT_PARSER.make_regexp
+ ref.to_s.match?(Regexp.new('\A' + uri_regex.source + '\Z', uri_regex.options))
end
attr_reader :url
@@ -156,15 +169,9 @@ module Hbc
end
def self.for(ref)
- if ref.respond_to?(:to_str)
- content = ref.to_str
- if content.match?(/\A\s*cask\s+(?:"[^"]*"|'[^']*')\s+do(?:\s+.*\s+|;?\s+)end\s*\Z/)
- return FromContentLoader.new(content)
- end
- end
-
[
FromInstanceLoader,
+ FromContentLoader,
FromURILoader,
FromTapLoader,
FromTapPathLoader,
diff --git a/Library/Homebrew/test/cask/cask_loader/from_content_loader_spec.rb b/Library/Homebrew/test/cask/cask_loader/from_content_loader_spec.rb
new file mode 100644
index 000000000..e735d5eca
--- /dev/null
+++ b/Library/Homebrew/test/cask/cask_loader/from_content_loader_spec.rb
@@ -0,0 +1,57 @@
+describe Hbc::CaskLoader::FromContentLoader do
+ alias_matcher :be_able_to_load, :be_can_load
+
+ describe "::can_load?" do
+ it "returns true for Casks specified with `cask \"token\" do … end`" do
+ expect(described_class).to be_able_to_load <<~EOS
+ cask "token" do
+ end
+ EOS
+ end
+
+ it "returns true for Casks specified with `cask \"token\" do; end`" do
+ expect(described_class).to be_able_to_load <<~EOS
+ cask "token" do; end
+ EOS
+ end
+
+ it "returns true for Casks specified with `cask 'token' do … end`" do
+ expect(described_class).to be_able_to_load <<~EOS
+ cask 'token' do
+ end
+ EOS
+ end
+
+ it "returns true for Casks specified with `cask 'token' do; end`" do
+ expect(described_class).to be_able_to_load <<~EOS
+ cask 'token' do; end
+ EOS
+ end
+
+ it "returns true for Casks specified with `cask(\"token\") { … }`" do
+ expect(described_class).to be_able_to_load <<~EOS
+ cask("token") {
+ }
+ EOS
+ end
+
+ it "returns true for Casks specified with `cask(\"token\") {}`" do
+ expect(described_class).to be_able_to_load <<~EOS
+ cask("token") {}
+ EOS
+ end
+
+ it "returns true for Casks specified with `cask('token') { … }`" do
+ expect(described_class).to be_able_to_load <<~EOS
+ cask('token') {
+ }
+ EOS
+ end
+
+ it "returns true for Casks specified with `cask('token') {}`" do
+ expect(described_class).to be_able_to_load <<~EOS
+ cask('token') {}
+ EOS
+ end
+ end
+end
diff --git a/Library/Homebrew/test/cask/cask_loader/from_uri_loader_spec.rb b/Library/Homebrew/test/cask/cask_loader/from_uri_loader_spec.rb
new file mode 100644
index 000000000..df2de1f82
--- /dev/null
+++ b/Library/Homebrew/test/cask/cask_loader/from_uri_loader_spec.rb
@@ -0,0 +1,21 @@
+describe Hbc::CaskLoader::FromURILoader do
+ alias_matcher :be_able_to_load, :be_can_load
+
+ describe "::can_load?" do
+ it "returns true when given an URI" do
+ expect(described_class).to be_able_to_load(URI("http://example.com/"))
+ end
+
+ it "returns true when given a String which can be parsed to a URI" do
+ expect(described_class).to be_able_to_load("http://example.com/")
+ end
+
+ it "returns false when given a String with Cask contents containing a URL" do
+ expect(described_class).not_to be_able_to_load <<~EOS
+ cask 'token' do
+ url 'http://example.com/'
+ end
+ EOS
+ end
+ end
+end