#!/usr/bin/env python
"""
Creates an test archive consisting of:

    *  The input and output(s) for each test
    * The manifest file
    * The test driver
"""
from pprint import pprint
from sets import Set
from rdflib.Namespace import Namespace
from rdflib.syntax.NamespaceManager import NamespaceManager
from rdflib import plugin,RDF,RDFS,URIRef,URIRef,Literal,Variable,BNode
from rdflib.store import Store
from cStringIO import StringIO
from rdflib.Graph import Graph,ReadOnlyGraphAggregate,ConjunctiveGraph
from GRDDL import GRDDLAgent, WebMemo
from zipfile import *
from Ft.Lib.Uri import Absolutize
import sys, getopt
import os, tempfile
import urllib2

DC_NS = Namespace('http://purl.org/dc/elements/1.1/')
EARL = Namespace('http://www.w3.org/ns/earl#')


def main():    
    zFile = ZipFile('grddl-tests.zip','w')
    zFile2 = ZipFile('grddl-remote-tests.zip','w')
    data = Graph()
    testDoc = Absolutize("grddl-tests.html", "file://%s/" % os.getcwd())
    GRDDLAgent(testDoc, data, WebMemo("file:",True),DEBUG=True)
    for format,extension in [('n3','n3'),('pretty-xml','rdf')]:        
        stream = StringIO() 
        data.serialize(format=format, destination=stream)
        zFile.writestr('grddl-tests.'+extension,stream.getvalue())
    zFile.write('testft.py')

    nsMapping = {
        u'test':Namespace('http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#'),
        u'dc':DC_NS
    }
    GRDDL_TEST_NS = Namespace('http://www.w3.org/TR/grddl-tests/grddl-test-vocabulary.rdf#')
    for descr,test,input,output in data.query("SELECT ?desc ?t ?i ?o WHERE { ?t test:inputDocument ?i. ?t a test:Test . ?t dc:title ?desc. ?t test:outputDocument ?o }",
                                              initNs=nsMapping):
        print >>sys.stderr, "###", descr,' ( ', test ,' ) ', " ###"
        input  = input.split('/')[-1].encode('utf-8')
        output = output.split('/')[-1].encode('utf-8')
        print >>sys.stderr, "\t",input
        print >>sys.stderr, "\t",output
        try:
            if input in [i.filename for i in zFile.infolist()]:
                print >>sys.stderr,"\tSkipping ", input
            else:
                zFile.write(input)        
            zFile.write(output)
        except Exception, e:
            print >>sys.stderr, e
            print >>sys.stderr, "\t ### Problems writing input/output files ###"
    zFile.close()
    zFile2.close()
if __name__ == '__main__':
    sys.exit(main())