#!/usr/bin/env ruby

# RDF query (in memory version), Dan Brickley <danbri@w3.org>

$LOAD_PATH.unshift '../../lib/'

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

class TC_MemorySquishLastClauseTest < Test::Unit::TestCase

  attr_accessor :data

  # Some constants
  REGNS = 'http://www.ukoln.ac.uk/metadata/education/regproj/reg/'
  ISUSAGEIN = REGNS + 'isUsageIn'
  USES = REGNS + 'uses'
  LABEL = 'http://www.w3.org/2000/01/rdf-schema#label'
  PROFILE = 'http://rdfweb.org/people/damian/applicationProfile-2918170486371926806'

  # Load data

  def init 
    @data = Loader.get_rdf('photoprofile.meg')
  end 


  def test_bogus
    # First query
    data = Loader.get_rdf('photoprofile.meg')

    query1 = SquishQuery.new
    query1String = "\
SELECT ?prop, ?label \
WHERE \
(#{ISUSAGEIN} ?usage #{PROFILE}) \
(#{USES} ?usage ?prop) \
(#{LABEL} ?usage ?label) \
(#{LABEL} ?usage ?bogus) " # This should be redundant

    query1.parseFromText(query1String)
    results1 = SquishQuery.ask(query1, data)
    assert(results1==nil, "Bogus query should be nil results") # nil?

    # Show results
    puts "Query 1 is:" , query1String , "\n\n"
    puts "Query 1 results:\n\n"
    results1.each do |row|
      row.values.each do |key, val|
        puts "#{key} => #{val}\n"
      end
      puts "\n"
    end
  end

  def test_normal
    data = Loader.get_rdf('photoprofile.meg')
    # Second query
    query2 = SquishQuery.new
    query2String = "\
SELECT ?prop, ?label \
WHERE \
(#{ISUSAGEIN} ?usage #{PROFILE}) \
(#{USES} ?usage ?prop) \
(#{LABEL} ?usage ?label) "

    query2.parseFromText(query2String)
    results2 = SquishQuery.ask(query2, data)
    assert(results2.size != 5, "OK query, not nil result set") #how big?

    # Show results
    puts "Query 2 is:" , query2String , "\n\n"
    puts "Query 2 results:\n\n"
    results2.each do |row|
      row.values.each do |key, val|
        puts "#{key} => #{val}\n"
      end
      puts "\n"
    end
  end

end
