Merge pull request #11889 from samford/livecheck/PageMatch-expand-find_versions-tests
PageMatch: Expand #find_versions tests
This commit is contained in:
commit
30e081baad
@ -44,20 +44,21 @@ module Homebrew
|
|||||||
# With either approach, an array of unique matches is returned.
|
# With either approach, an array of unique matches is returned.
|
||||||
#
|
#
|
||||||
# @param content [String] the page content to check
|
# @param content [String] the page content to check
|
||||||
# @param regex [Regexp] a regex used for matching versions in the
|
# @param regex [Regexp, nil] a regex used for matching versions in the
|
||||||
# content
|
# content
|
||||||
# @return [Array]
|
# @return [Array]
|
||||||
sig {
|
sig {
|
||||||
params(
|
params(
|
||||||
content: String,
|
content: String,
|
||||||
regex: Regexp,
|
regex: T.nilable(Regexp),
|
||||||
block: T.nilable(
|
block: T.nilable(
|
||||||
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
|
T.proc.params(arg0: String, arg1: T.nilable(Regexp)).returns(T.any(String, T::Array[String], NilClass)),
|
||||||
),
|
),
|
||||||
).returns(T::Array[String])
|
).returns(T::Array[String])
|
||||||
}
|
}
|
||||||
def self.versions_from_content(content, regex, &block)
|
def self.versions_from_content(content, regex, &block)
|
||||||
return Strategy.handle_block_return(block.call(content, regex)) if block
|
return Strategy.handle_block_return(block.call(content, regex)) if block
|
||||||
|
return [] if regex.blank?
|
||||||
|
|
||||||
content.scan(regex).map do |match|
|
content.scan(regex).map do |match|
|
||||||
case match
|
case match
|
||||||
@ -73,22 +74,22 @@ module Homebrew
|
|||||||
# regex for matching.
|
# regex for matching.
|
||||||
#
|
#
|
||||||
# @param url [String] the URL of the content to check
|
# @param url [String] the URL of the content to check
|
||||||
# @param regex [Regexp] a regex used for matching versions
|
# @param regex [Regexp, nil] a regex used for matching versions
|
||||||
# @param provided_content [String, nil] page content to use in place of
|
# @param provided_content [String, nil] page content to use in place of
|
||||||
# fetching via Strategy#page_content
|
# fetching via Strategy#page_content
|
||||||
# @return [Hash]
|
# @return [Hash]
|
||||||
sig {
|
sig {
|
||||||
params(
|
params(
|
||||||
url: String,
|
url: String,
|
||||||
regex: Regexp,
|
regex: T.nilable(Regexp),
|
||||||
provided_content: T.nilable(String),
|
provided_content: T.nilable(String),
|
||||||
_unused: T.nilable(T::Hash[Symbol, T.untyped]),
|
_unused: T.nilable(T::Hash[Symbol, T.untyped]),
|
||||||
block: T.nilable(
|
block: T.nilable(
|
||||||
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
|
T.proc.params(arg0: String, arg1: T.nilable(Regexp)).returns(T.any(String, T::Array[String], NilClass)),
|
||||||
),
|
),
|
||||||
).returns(T::Hash[Symbol, T.untyped])
|
).returns(T::Hash[Symbol, T.untyped])
|
||||||
}
|
}
|
||||||
def self.find_versions(url:, regex:, provided_content: nil, **_unused, &block)
|
def self.find_versions(url:, regex: nil, provided_content: nil, **_unused, &block)
|
||||||
match_data = { matches: {}, regex: regex, url: url }
|
match_data = { matches: {}, regex: regex, url: url }
|
||||||
return match_data if url.blank? || (regex.blank? && block.blank?)
|
return match_data if url.blank? || (regex.blank? && block.blank?)
|
||||||
|
|
||||||
|
|||||||
@ -108,6 +108,23 @@ describe Homebrew::Livecheck::Strategy::PageMatch do
|
|||||||
it "finds versions in provided_content" do
|
it "finds versions in provided_content" do
|
||||||
expect(page_match.find_versions(url: http_url, regex: regex, provided_content: content))
|
expect(page_match.find_versions(url: http_url, regex: regex, provided_content: content))
|
||||||
.to eq(find_versions_cached_return_hash)
|
.to eq(find_versions_cached_return_hash)
|
||||||
|
|
||||||
|
# NOTE: Ideally, a regex should always be provided to `#find_versions`
|
||||||
|
# for `PageMatch` but there are currently some `livecheck` blocks in
|
||||||
|
# casks where `#regex` isn't used and the regex only exists within a
|
||||||
|
# `strategy` block. This isn't ideal but, for the moment, we allow a
|
||||||
|
# `strategy` block to act as a substitution for a regex and we need to
|
||||||
|
# test this scenario to ensure it works.
|
||||||
|
#
|
||||||
|
# Under normal circumstances, a regex should be established in a
|
||||||
|
# `livecheck` block using `#regex` and passed into the `strategy` block
|
||||||
|
# using `do |page, regex|`. Hopefully over time we can address related
|
||||||
|
# issues and get to a point where regexes are always established using
|
||||||
|
# `#regex`.
|
||||||
|
expect(page_match.find_versions(url: http_url, provided_content: content) do |page|
|
||||||
|
page.scan(%r{href=.*?/homebrew[._-]v?(\d+(?:\.\d+)+)/?["' >]}i).map(&:first)
|
||||||
|
end)
|
||||||
|
.to eq(find_versions_cached_return_hash.merge({ regex: nil }))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user