# frozen_string_literal: true

require 'spec_helper'

isalaysay_ang 'Tagatala' do
  italaga_ang(:pasimulang_kodigo) do
    "# encoding: utf-8\nrequire \"bato/core_ext\"\n"
  end

  italaga_ang(:tagatala) do
    Bato::Tagatala.new
  end

  ito_ang 'walang lamang program na Bato' do
    tagatala.sa_ruby('').should == pasimulang_kodigo + ''
  end

  isalaysay_ang 'bilang' do
    ito_ang 'pambuong bilang' do
      tagatala.sa_ruby('1').should == pasimulang_kodigo + '1'
    end

    ito_ang 'maliliit na bilang' do
      tagatala.sa_ruby('1.2').should == pasimulang_kodigo + '1.2'
    end

    ito_ang 'listahan ng mga bilang' do
      tagatala.sa_ruby('[1.2, 3]').should == pasimulang_kodigo + '[1.2, 3]'
    end
  end

  isalaysay_ang 'ekspresyong Boolean' do
    ito_ang 'ekspresyon ng tama o true' do
      tagatala.sa_ruby('tama').should == pasimulang_kodigo + 'true'
    end

    ito_ang 'ekspresyon ng mali o false' do
      tagatala.sa_ruby('mali').should == pasimulang_kodigo + 'false'
    end

    ito_ang 'ekspresyon ng hindi o not' do
      tagatala.sa_ruby('hindi tama').should == pasimulang_kodigo + '(not true)'
    end
  end

  isalaysay_ang 'susing mga salita' do
    ito_ang 'ekspresyon ng kapag / dapat / kung_kapag / kung_hindi / katapusan' do
      tagatala.sa_ruby('
        kapag 1 dapat
          2
        kung_kapag 3
          4
        kung_hindi
          5
        katapusan').should be_like(pasimulang_kodigo +
        '1 ? (2) : (3 ? (4) : (5))')
    end

    ito_ang 'ekspresyon ng kung_sakaling / pagka / dapat / kung_hindi / katapusan' do
      tagatala.sa_ruby("
        kung_sakaling 1
        pagka 1 dapat 1
        pagka 2
          2
        kung_hindi
          3
        katapusan").should be_like(pasimulang_kodigo +
        'case 1
        when 1 then
          1
        when 2 then
          2
        else
          3
        end')
    end

    ito_ang 'simula / iligtas / iangat / siguraduhing / katapusan' do
      # raise ir Kernel metode nevis atslēgvārds
      tagatala.sa_ruby('
        simula
          1 / 0
        iligtas => pagkakamali
          subukang_muli
          iangat pagkakamali, pagkakamali.iulat
        siguraduhing
          mag_print "Katapusan"
        katapusan').should be_like(pasimulang_kodigo +
        'begin
          (1 / 0)
        rescue => pagkakamali
          retry
          iangat(pagkakamali, pagkakamali.iulat)
        ensure
          mag_print("Katapusan")
        end')
    end
  end

  isalaysay_ang 'pamamaraan sa Kernel' do
    ito_ang "ekspresyon ng pagsusulat gamit ang 'mag_print'" do
      tagatala.sa_ruby("mag_print 'abc'").should ==
        pasimulang_kodigo + 'mag_print("abc")'
    end
  end

  isalaysay_ang 'Dinikit na mga pamamaraan' do
    ito_ang 'ekspresyon ng pamamaraan sa pagbabaliktad ng mga titik' do
      resulta = eval tagatala.sa_ruby("'magandang araw'.baliktad")
      resulta.should == 'wara gnadnagam'
    end

    ito_ang 'ekspresayon ng pamamaraan sa pagsukat ng haba ng salita' do
      resulta = eval tagatala.sa_ruby("'Pangungusap'.haba")
      resulta.should == 11
    end
  end
end
