summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorMartin Emde <me@martinemde.com>2024-05-30 21:37:24 -0700
committergit <svn-admin@ruby-lang.org>2024-05-31 20:20:03 +0000
commitbc40d0609177cd60ba1bc4fd915e03e917c0b79c (patch)
tree1dd1b74d97bb52f0a98109e6272557ff337dc187 /spec
parentb5c8fb9a3f1ee8a38a04a3c96b7da5bf6c4c23ac (diff)
[rubygems/rubygems] String search based parsing of compact index versions
This significantly reduces memory usage. https://github.com/rubygems/rubygems/commit/8a76506c90
Diffstat (limited to 'spec')
-rw-r--r--spec/bundler/bundler/compact_index_client/parser_spec.rb44
1 files changed, 41 insertions, 3 deletions
diff --git a/spec/bundler/bundler/compact_index_client/parser_spec.rb b/spec/bundler/bundler/compact_index_client/parser_spec.rb
index 1d1d41a5a8..45a08fd9ff 100644
--- a/spec/bundler/bundler/compact_index_client/parser_spec.rb
+++ b/spec/bundler/bundler/compact_index_client/parser_spec.rb
@@ -20,7 +20,9 @@ RSpec.describe Bundler::CompactIndexClient::Parser do
let(:compact_index) { TestCompactIndexClient.new(names, versions, info_data) }
let(:names) { "a\nb\nc\n" }
- let(:versions) { <<~VERSIONS }
+ let(:versions) { <<~VERSIONS.dup }
+ created_at: 2024-05-01T00:00:04Z
+ ---
a 1.0.0,1.0.1,1.1.0 aaa111
b 2.0.0,2.0.0-java bbb222
c 3.0.0,3.0.3,3.3.3 ccc333
@@ -33,7 +35,8 @@ RSpec.describe Bundler::CompactIndexClient::Parser do
"c" => { "ccc333yanked" => c_info },
}
end
- let(:a_info) { <<~INFO }
+ let(:a_info) { <<~INFO.dup }
+ ---
1.0.0 |checksum:aaa1,ruby:>= 3.0.0,rubygems:>= 3.2.3
1.0.1 |checksum:aaa2,ruby:>= 3.0.0,rubygems:>= 3.2.3
1.1.0 |checksum:aaa3,ruby:>= 3.0.0,rubygems:>= 3.2.3
@@ -52,10 +55,45 @@ RSpec.describe Bundler::CompactIndexClient::Parser do
expect(parser).to be_available
end
- it "returns false when versions are not available" do
+ it "returns true when versions has only one gem" do
+ compact_index.versions = +"a 1.0.0 aaa1\n"
+ expect(parser).to be_available
+ end
+
+ it "returns true when versions has a gem and a header" do
+ compact_index.versions = +"---\na 1.0.0 aaa1\n"
+ expect(parser).to be_available
+ end
+
+ it "returns true when versions has a gem and a header with header data" do
+ compact_index.versions = +"created_at: 2024-05-01T00:00:04Z\n---\na 1.0.0 aaa1\n"
+ expect(parser).to be_available
+ end
+
+ it "returns false when versions has only the header" do
+ compact_index.versions = +"---\n"
+ expect(parser).not_to be_available
+ end
+
+ it "returns false when versions has only the header with header data" do
+ compact_index.versions = +"created_at: 2024-05-01T00:00:04Z\n---\n"
+ expect(parser).not_to be_available
+ end
+
+ it "returns false when versions index is not available" do
compact_index.versions = nil
expect(parser).not_to be_available
end
+
+ it "returns false when versions is empty" do
+ compact_index.versions = +""
+ expect(parser).not_to be_available
+ end
+
+ it "returns false when versions ends improperly without a newline" do
+ compact_index.versions = "a 1.0.0 aaa1"
+ expect(parser).not_to be_available
+ end
end
describe "#names" do