Add liquid-spec for conformance testing

- Add liquid-spec gem from GitHub to :spec group
- Create spec/ruby-liquid.rb adapter for the reference implementation
- Add spec job to CI workflow to run liquid-spec tests
This commit is contained in:
Tobi Lutke
2026-01-01 21:34:10 -05:00
parent af58800c16
commit 05f9c2a030
3 changed files with 48 additions and 0 deletions
+10
View File
@@ -42,6 +42,16 @@ jobs:
env:
RUBYOPT: ${{ matrix.entry.rubyopt }}
spec:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
- uses: ruby/setup-ruby@a25f1e45f0e65a92fcb1e95e8847f78fb0a7197a # v1.273.0
with:
bundler-cache: true
bundler: latest
- run: bundle exec liquid-spec run spec/ruby-liquid.rb --no-max-failures
memory_profile:
runs-on: ubuntu-latest
steps:
+4
View File
@@ -30,3 +30,7 @@ group :test do
gem 'rubocop-shopify', '~> 2.18.0', require: false
gem 'rubocop-performance', require: false
end
group :spec do
gem 'liquid-spec', github: 'Shopify/liquid-spec'
end
+34
View File
@@ -0,0 +1,34 @@
# frozen_string_literal: true
# Liquid Spec Adapter for Shopify/liquid (Ruby reference implementation)
#
# Run with: bundle exec liquid-spec run spec/ruby-liquid.rb
$LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
require 'liquid'
LiquidSpec.configure do |config|
# Run core Liquid specs
config.features = [:core]
end
# Compile a template string into a Liquid::Template
LiquidSpec.compile do |source, options|
Liquid::Template.parse(source, **options)
end
# Render a compiled template with the given context
LiquidSpec.render do |template, ctx|
static_registers = ctx.registers
registers = Liquid::Registers.new(static_registers)
context = Liquid::Context.build(
static_environments: ctx.environment,
registers: registers,
rethrow_errors: ctx.rethrow_errors?
)
context.exception_renderer = ctx.exception_renderer if ctx.exception_renderer
template.render(context)
end