#!/usr/bin/env ruby
#
# Experimenting with query tests
# todo: /2000/10/rdf-tests/rdfq
# danbri@w3.org
#
#  ./tc_squish.rb > _parser_tests.rb
#
# We want to know, for each query:
# number of clauses, number of variables, whether it is wellformed
# (whether it uses various supported or unsupported featurs?)
# So we should be reading a test manifest format...? 
# (compiled from rdf into nt by a reliable rdf parser?)

`rdfdump -o ntriples -q file:rdfq_test_manifest.rdf > rdfq_test_manifest.nt`

require 'test/unit'
require './squish'
require '../basicrdf'

class TC_Squish < Test::Unit::TestCase
   def set_up
	@data = Loader.ntfile2graph 'rdfq_test_manifest.nt'
	@rdf     = @data.reg_xmlns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdf'
	@test    = @data.reg_xmlns 'http://www.w3.org/2002/06/rdfq_test#', 'test'
   end

   def test_parse
     testlist = @data.ask(Statement.new(nil,@rdf+'type',@test+'Query')).subjects

     testlist.each do |query| 
       @query = SquishQuery.new

       q = query.test_name.to_s
       num_clauses_expected = query.test_clauses.to_s 
       num_vars_expected = query.test_variables.to_s
       wf_expected = query.test_wf.to_s
       format = query.test_format.to_s

tn = q.gsub(/\//, "_")
tn.gsub!(/-/, "_")
fn = "#{q}.#{format}"
tg =<<EOT 

################# Begin generated Test: 
#
def test_#{tn} 
  @query = SquishQuery.new
#  q = query.test_name.to_s
  q="#{q}"
  fn = "#{q}.#{format}"  
  num_clauses_expected = "#{num_clauses_expected}" 
  num_vars_expected = "#{num_vars_expected}"
  wf_expected = "#{wf_expected}"
  format = "#{format}"
  wf_actual="true" 
  wfmsg=""
  begin
  @query.parseFromText `cat #{fn}` 
  rescue
    wfmsg= "Error: ", $! 
    wf_actual="false"
  end
  num_vars_actual = @query.all_vars.keys.size.to_s
  num_clauses_actual = @query.clauses.size.to_s
  assert_equal(num_vars_expected, num_vars_actual , "Should be #{num_vars_expected} variables in #{fn}")
  assert_equal(num_clauses_expected, num_clauses_actual  , "Should be #{num_vars_expected} clauses in #{fn}")
end
#
########################## end test.

EOT

puts "#!/usr/bin/env ruby"
puts "# Autogenerated RDF parser tests: \n\n"
puts 	"require 'test/unit'"
puts 	"require './squish'"
puts	"require '../basicrdf'"

puts "class TC_Squish < Test::Unit::TestCase\n"
puts "   def set_up "
puts <<TOP
        @data = Loader.ntfile2graph 'rdfq_test_manifest.nt'
	@rdf     = @data.reg_xmlns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdf'
	@test    = @data.reg_xmlns 'http://www.w3.org/2002/06/rdfq_test#', 'test'
   end
TOP

puts "\n# Generated test:\n\n#{tg}\n\nend\n\n"


       wf_actual="true" 
       wfmsg=""
       fn = q + '.' + format
       begin
         @query.parseFromText  `cat #{fn}`
         # should be smarter about alternate query formats
       rescue 
         wfmsg= "Error: ",$!
         wf_actual="false"
       end

      num_vars_actual = @query.all_vars.keys.size.to_s
      num_clauses_actual = @query.clauses.size.to_s
      puts "#Results: #{q} Clauses: #{num_clauses_actual} vars:#{num_vars_actual} "
#      assert_equal(wf_expected,wf_actual, "Wellformedness problem")
#      assert_equal(num_vars_expected, num_vars_actual , "Should be #{num_vars_expected} variables in #{fn}")
#      assert_equal(num_clauses_expected, num_clauses_actual  , "Should be  #{num_vars_expected} clauses in #{fn}")

     end
   end
   
   def tear_down
      @parser = nil
   end
end

#<t:Query
#        t:name = "samples/test2.squish"
#        t:clauses = "1"
#        t:variables = "2"
#        t:wf="true"
#        t:comment="ok"
#/>
