test_that("redland library loads", {
  library(redland)
  # Add a line to this test to prevent 'Empty test' (skipped) msg.
  expect_true(require(redland))
})
test_that("Serializer constructor", {
  library(redland)
  world <- new("World")
  expect_false(is.null(world))
  
  # Test creating the Storage system
  storage <- new("Storage", world, "hashes", name="", options="hash-type='memory'")
  expect_false(is.null(storage))
  expect_match(class(storage@librdf_storage), "_p_librdf_storage_s")
  
  # Test creating the Model
  model <- new("Model", world, storage, options="")
  expect_false(is.null(model))
  expect_match(class(model@librdf_model), "_p_librdf_model_s")
  
  # Test that model creation fails if world is not provided or is null
  err <- try(model <- new("Model", world=NULL, storage, options=""), silent=TRUE)
  expect_match(class(err), "try-error")
  
  expect_false(is.null(model))
  expect_match(class(model@librdf_model), "_p_librdf_model_s")
  
  # Test adding a Statement to the Model
  subject <- new("Node", world, uri="http://www.johnsmith.com/")
  expect_match(class(subject@librdf_node), "_p_librdf_node_s")
  predicate <- new("Node", world, uri="http://purl.org/dc/elements/1.1/creator")
  expect_match(class(predicate@librdf_node), "_p_librdf_node_s")
  object <- new("Node", world, literal="John Smith", datatype_uri="http://www.w3.org/2001/XMLSchema#string")
  expect_match(class(object@librdf_node), "_p_librdf_node_s")
  statement <- new("Statement", world, subject, predicate, object)
  expect_false(is.null(statement))
  expect_match(class(statement@librdf_statement), "_p_librdf_statement_s")
  addStatement(model, statement)
  
  # Test creating a Serializer
  serializer <- new("Serializer", world, mimeType="application/rdf+xml")
  expect_false(is.null(serializer))
  expect_match(class(serializer@librdf_serializer), "_p_librdf_serializer_s")
  
  # Test adding a namespace to a serializer
  status <- setNameSpace(serializer, world, namespace="http://purl.org/dc/elements/1.1/", prefix="dc")
  expect_equal(status, 0)
  
  # Test serialization of an RDF model to a string
  rdf <- serializeToCharacter(serializer, world, model, "")
  expect_match(rdf, "John Smith")
  
  # Test serialization of an RDF model to a file
  filePath <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".rdf")
  status <- serializeToFile(serializer, world, model, filePath)
  found <- grep("John Smith", readLines(filePath))
  expect_gt(found, 0)
  unlink(filePath)
  
  err <- try(freeStatement(statement), silent=TRUE)
  expect_false(class(err) == "try-error")
  
  err <- try(freeSerializer(serializer), silent=TRUE)
  expect_false(class(err) ==  "try-error")
  
  err <- try(freeModel(model), silent=TRUE)
  expect_false(class(err) == "try-error")
  
  err <- try(freeStorage(storage), silent=TRUE)
  expect_false(class(err) == "try-error")
  
  err <- try(freeWorld(world), silent=TRUE)
  expect_false(class(err) == "try-error")
  
})