# frozen_string_literal: true

require 'rake'
require 'rake/testtask'
$LOAD_PATH.unshift(File.expand_path('lib', __dir__))
require 'liquid/version'

task(default: %i[test rubocop])

desc('run test suite with default parser')
Rake::TestTask.new(:base_test) do |t|
  t.libs << '.' << 'lib' << 'test'
  t.test_files = FileList['test/{integration,unit}/**/*_test.rb']
  t.verbose = false
end

desc('run test suite with warn error mode')
task :warn_test do
  ENV['LIQUID_PARSER_MODE'] = 'warn'
  Rake::Task['base_test'].invoke
end

task :rubocop do
  if RUBY_ENGINE == 'ruby'
    require 'rubocop/rake_task'
    RuboCop::RakeTask.new
  end
end

desc('runs test suite with both strict and lax parsers')
task :test do
  ENV['LIQUID_PARSER_MODE'] = 'lax'
  Rake::Task['base_test'].invoke

  ENV['LIQUID_PARSER_MODE'] = 'strict'
  Rake::Task['base_test'].reenable
  Rake::Task['base_test'].invoke

  if RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'truffleruby'

    ENV['LIQUID_C'] = '1'

    ENV['LIQUID_PARSER_MODE'] = 'lax'
    Rake::Task['base_test'].reenable
    Rake::Task['base_test'].invoke

    ENV['LIQUID_PARSER_MODE'] = 'strict'
    Rake::Task['base_test'].reenable
    Rake::Task['base_test'].invoke
  end
end

task(gem: :build)
task :build do
  system 'gem build liquid.gemspec'
end

task install: :build do
  system "gem install liquid-#{Liquid::VERSION}.gem"
end

task release: :build do
  system "git tag -a v#{Liquid::VERSION} -m 'Tagging #{Liquid::VERSION}'"
  system 'git push --tags'
  system "gem push liquid-#{Liquid::VERSION}.gem"
  system "rm liquid-#{Liquid::VERSION}.gem"
end

namespace :benchmark do
  desc 'Run the liquid benchmark with lax parsing'
  task :run do
    ruby './performance/benchmark.rb lax'
  end

  desc 'Run the liquid benchmark with strict parsing'
  task :strict do
    ruby './performance/benchmark.rb strict'
  end
end

namespace :profile do
  desc 'Run the liquid profile/performance coverage'
  task :run do
    ruby './performance/profile.rb'
  end

  desc 'Run the liquid profile/performance coverage with strict parsing'
  task :strict do
    ruby './performance/profile.rb strict'
  end
end

namespace :memory_profile do
  desc 'Run memory profiler'
  task :run do
    ruby './performance/memory_profile.rb'
  end
end

desc('Run example')
task :example do
  ruby '-w -d -Ilib example/server/server.rb'
end

task :console do
  exec 'irb -I lib -r liquid'
end
