diff --git a/.github/workflows/liquid.yml b/.github/workflows/liquid.yml index bd0df8e5..ee204542 100644 --- a/.github/workflows/liquid.yml +++ b/.github/workflows/liquid.yml @@ -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: diff --git a/Gemfile b/Gemfile index 07994975..05dab651 100644 --- a/Gemfile +++ b/Gemfile @@ -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 diff --git a/spec/ruby-liquid.rb b/spec/ruby-liquid.rb new file mode 100644 index 00000000..ebe782ba --- /dev/null +++ b/spec/ruby-liquid.rb @@ -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