Sha256: 65f74eb9b6e1418fba5ed85da7f08ed73495235636d9a4cce482ab6647fb68dd

Contents?: true

Size: 1.89 KB

Versions: 13

Compression:

Stored size: 1.89 KB

Contents

#
# ActiveFacts tests: Parse all CQL files and check the generated Ruby.
# Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
#

require 'spec_helper'
require 'stringio'
require 'activefacts/vocabulary'
require 'activefacts/support'
require 'activefacts/input/orm'
require 'activefacts/generate/ruby'

class String
  def strip_comments()
    c_comment = %r{/\*((?!\*/).)*\*/}m
    gsub(c_comment, '').gsub(%r{\n\n+},"\n")
  end
end

describe "NORMA Loader with Ruby output" do
  orm_failures = {
    "SubtypePI" => "Has an illegal uniqueness constraint",
  }

  # Generate and return the Ruby for the given vocabulary
  def ruby(vocabulary)
    output = StringIO.new
    @dumper = ActiveFacts::Generate::RUBY.new(vocabulary.constellation)
    @dumper.generate(output)
    output.rewind
    output.read
  end

  pattern = ENV["AFTESTS"] || "*"
  Dir["examples/norma/#{pattern}.orm"].each do |orm_file|
    expected_file = orm_file.sub(%r{examples/norma/(.*).orm\Z}, 'examples/ruby/\1.rb')
    actual_file = orm_file.sub(%r{examples/norma/(.*).orm\Z}, 'spec/actual/\1.rb')
    base = File.basename(orm_file, ".orm")

    next unless ENV["AFTESTS"] || File.exists?(expected_file)

    it "should load #{orm_file} and dump Ruby matching #{expected_file}" do
      begin
        vocabulary = ActiveFacts::Input::ORM.readfile(orm_file)
      rescue => e
        raise unless orm_failures.include?(base)
        pending orm_failures[base]
      end

      # Build and save the actual file:
      ruby_text = ruby(vocabulary)
      Dir.mkdir "spec/actual" rescue nil
      File.open(actual_file, "w") { |f| f.write ruby_text }

      pending("expected output file #{expected_file} not found") unless File.exists? expected_file

      expected_text = File.open(expected_file) {|f| f.read }
      ruby_text.should_not differ_from(expected_text)
      File.delete(actual_file)  # It succeeded, we don't need the file.
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
activefacts-1.6.0 spec/norma_ruby_spec.rb
activefacts-1.5.3 spec/norma_ruby_spec.rb
activefacts-1.5.2 spec/norma_ruby_spec.rb
activefacts-1.5.1 spec/norma_ruby_spec.rb
activefacts-1.5.0 spec/norma_ruby_spec.rb
activefacts-1.3.0 spec/norma_ruby_spec.rb
activefacts-1.2.1 spec/norma_ruby_spec.rb
activefacts-1.2.0 spec/norma_ruby_spec.rb
activefacts-1.1.0 spec/norma_ruby_spec.rb
activefacts-1.0.2 spec/norma_ruby_spec.rb
activefacts-1.0.1 spec/norma_ruby_spec.rb
activefacts-1.0.0 spec/norma_ruby_spec.rb
activefacts-0.8.18 spec/norma_ruby_spec.rb