Exemplo n.º 1
0
 def testTrafficlightJSON(self):
     """
     Test report generating traffic-light JSON (per data/mockup.json)
     """
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(trafficlight_test_data)
     RdfReport.generate_report(TrafficLightReports.EvalChecklistJson, rdfgraph, {}, outstr)
     # Test the non-item output only.  The previous test checks itemized output.
     expected = (
       [ ''''''
       , '''{ "rouri":                  "file:///usr/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/"'''
       , ''', "roid":                   "simple-requirements"'''
       , ''', "title":                  "A simple test RO"'''
       , ''', "description":            "A simple RO used for testing traffic light display."'''
       , ''', "checklisturi":           "file:///usr/workspace/wf4ever-ro-manager/Checklists/runnable-wf-trafficlight/checklist.rdf#Runnable_model"'''
       , ''', "checklistpurpose":       "Runnable"'''
       , ''', "checklisttarget":        "file:///usr/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/"'''
       , ''', "checklisttargetid":      "simple-requirements"'''
       , ''', "checklisttargetlabel":   "simple-requirements"'''
       , ''', "evalresult":             "http://purl.org/minim/minim#minimallySatisfies"'''
       , ''', "evalresultlabel":        "minimally satisfies"'''
       , ''', "evalresultclass":        ["fail", "should"]'''
       ])
     result = outstr.getvalue()
     log.debug("---- JSON result\n%s\n----"%(result))
     resultlines = result.split('\n')
     for i in range(len(expected)):
         self.assertEqual(expected[i], resultlines[i].strip())
     # Check that output is valid JSON
     resultdict = json.loads(result)
     self.assertEqual(resultdict['rouri'],
         "file:///usr/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/")
     return
Exemplo n.º 2
0
 def testReportEvalItemHTML(self):
     """
     Test report of a textual status summary of a checklist match
     """
     rouristr  = "file:///usr/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/"
     checklist = "file:///usr/workspace/wf4ever-ro-manager/Checklists/runnable-wf-trafficlight/checklist.rdf"
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(trafficlight_test_data)
     initvars  = (
         { 'result':     rdfgraph.value(predicate=RDF.type, object=MINIM.Result)
         , 'rouri':      rdflib.URIRef(rouristr)
         , 'modeluri':   rdflib.URIRef(checklist+"#Runnable_model") 
         , 'itemuri':    rdflib.URIRef(checklist+"#workflow_inputs_accessible")
         , 'itemlevel':  rdflib.URIRef("http://purl.org/minim/minim#missingShould")
         })
     outstr   = StringIO.StringIO()
     RdfReport.generate_report(TrafficLightReports.EvalItemHtml, rdfgraph, initvars, outstr)
     expected = (
         [ ''
         , '''<tr class="sub_result">'''
         , '''<td></td>'''
         , '''<td class="trafficlight small fail should"><div/></td>'''
         , '''<td>Workflow %sdocs/mkjson.sh input %sdata/UserRequirements-bio.ods is not accessible</td>'''%
           (rouristr, rouristr)
         , '''</tr>'''
         ])
     result = outstr.getvalue()
     #print "\n-----"
     #print result
     #print "-----"
     resultlines = result.split('\n')
     for i in range(len(expected)):
         self.assertEqual(expected[i], resultlines[i].strip())
     return
Exemplo n.º 3
0
 def testReportEvalResultUri(self):
     """
     Test report that selects one of the following test result status URIs from:
         http://purl.org/minim/minim#fullySatifies
         http://purl.org/minim/minim#nominallySatifies
         http://purl.org/minim/minim#minimallySatifies
         http://purl.org/minim/minim#potentiallySatisfies
     """
     rouristr  = "file:///usr/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/"
     checklist = "file:///usr/workspace/wf4ever-ro-manager/Checklists/runnable-wf-trafficlight/checklist.rdf"
     initvars  = (
         { 'target': rdflib.URIRef(rouristr)
         , 'minim':  rdflib.URIRef(checklist+"#Runnable_model") 
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(trafficlight_test_data)
     RdfReport.generate_report(TrafficLightReports.EvalTargetResultUri, rdfgraph, initvars, outstr)
     expected = "http://purl.org/minim/minim#minimallySatisfies"
     result = outstr.getvalue()
     # print "\n-----"
     # print result
     # print "-----"
     self.assertEqual(expected, result)
     return
Exemplo n.º 4
0
def evaluate_trafficlight_html(request):
    """
    Return HTML page for trafficlight display of checklist evaluation
    
    Request parameters as as for checklist evaluation.
    """
    resultgraph = evaluate(request)
    outstr      = StringIO.StringIO()
    RdfReport.generate_report(
        TrafficLightReports.EvalChecklistHtml, resultgraph, {}, outstr, RdfReport.escape_html)
    return Response(outstr.getvalue(), content_type="text/html", vary=['accept'])
Exemplo n.º 5
0
def evaluate_trafficlight_json(request):
    """
    Return JSON data for trafficlight display of checklist evaluation
    
    Request parameters as as for checklist evaluation.
    """
    resultgraph = evaluate(request)
    outstr      = StringIO.StringIO()
    RdfReport.generate_report(
        TrafficLightReports.EvalChecklistJson, resultgraph, {}, outstr, RdfReport.escape_json)
    return Response(outstr.getvalue(), content_type="application/json", vary=['accept'])
Exemplo n.º 6
0
 def testHelloWorld(self):
     """
     Test just about the simplest possible report
     """
     report = (
         { 'report':
           { 'output': "Hello world" }
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(simple_test_data)
     RdfReport.generate_report(report, rdfgraph, {}, outstr)
     self.assertEqual("Hello world", outstr.getvalue())
     return
Exemplo n.º 7
0
 def testSimpleQuotedHtml(self):
     """
     Test HTML quoting in simple report
     """
     report = (
         { 'report':
           { 'query':  prefixes+"SELECT * WHERE { ?s ex:quoteme ?quoteme }"
           , 'output': "Hello %(quoteme_esc)s" }
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(simple_test_data)
     RdfReport.generate_report(report, rdfgraph, {}, outstr, RdfReport.escape_html)
     self.assertEqual("""Hello &lt;"Graham"&gt;""", outstr.getvalue())
     return
Exemplo n.º 8
0
 def testSimpleQuery(self):
     """
     Test a simple query report
     """
     report = (
         { 'report':
           { 'query':  prefixes+"SELECT * WHERE { ?s dcterms:creator ?creator }"
           , 'output': "Hello %(creator)s" }
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(simple_test_data)
     RdfReport.generate_report(report, rdfgraph, {}, outstr)
     self.assertEqual("Hello Graham", outstr.getvalue())
     return
Exemplo n.º 9
0
 def testQueryResultMerge(self):
     """
     Test a simple query merged with existing results
     """
     report = (
         { 'report':
           { 'query':  prefixes+"SELECT * WHERE { ?s dcterms:creator ?creator }"
           , 'output': "Hello %(creator)s and %(name)s"
           }
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(simple_test_data)
     RdfReport.generate_report(report, rdfgraph, {'name': 'anyone'}, outstr)
     self.assertEqual("Hello Graham and anyone", outstr.getvalue())
     return
Exemplo n.º 10
0
 def testNesting(self):
     """
     Test a report with a nested sub-report
     """
     report = (
         { 'report':
           [ { 'query':  prefixes+
                         "SELECT ?s ?title ?label WHERE { ?s dcterms:title ?title; rdfs:label ?label } "+
                         "ORDER BY DESC(?label)"
             , 'output': "\nFound %(title)s:"
             , 'report':
               [ {'output': "\nTags for %(label)s: " }
               , { 'query':  prefixes+"SELECT * WHERE { ?s ex:tag ?tag } ORDER BY ?tag"
                 , 'output': "%(tag)s"
                 , 'sep':    ", "
                 , 'alt':    "none"
                 }
               , { 'output': "." }
               , { 'output': "\nFinished %(title)s." }
               ]
             }
           , { 'output': "\nFinished all." }
           ]
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(simple_test_data)
     RdfReport.generate_report(report, rdfgraph, {}, outstr)
     expected = ("\n"+
         "Found Simple test data:\n"+
         "Tags for simple-test-data: tag1, tag2, tag3, tag4.\n"+
         "Finished Simple test data.\n"+
         "Found More test data:\n"+
         "Tags for more-test-data: more1, more2.\n"+
         "Finished More test data.\n"+
         "Finished all."+
         "")
     result = outstr.getvalue()
     # print "\n-----"
     # print result
     # print "-----"
     self.assertEqual(expected, result)
     return
Exemplo n.º 11
0
 def testAlternativeMissing(self):
     """
     Test an alterantive (query not matched) report with no alternative given
     """
     report = (
         { 'report':
           [ { 'output': "Foreword: " }
           , { 'query':  prefixes+"SELECT * WHERE { ?s ex:notfound ?creator }"
             , 'output': "Hello %(creator)s; " 
             }
           , { 'output': "afterword." }
           ]
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(simple_test_data)
     RdfReport.generate_report(report, rdfgraph, {'name': "anyone"}, outstr)
     self.assertEqual("Foreword: afterword.", outstr.getvalue())
     return
Exemplo n.º 12
0
 def testSequence(self):
     """
     Test a sequence report
     """
     report = (
         { 'report':
           [ { 'output': "Foreword: " }
           , { 'query':  prefixes+"SELECT * WHERE { ?s dcterms:creator ?creator }"
             , 'output': "Hello %(creator)s; "
             }
           , { 'output': "afterword." }
           ]
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(simple_test_data)
     RdfReport.generate_report(report, rdfgraph, {}, outstr)
     self.assertEqual("Foreword: Hello Graham; afterword.", outstr.getvalue())
     return
Exemplo n.º 13
0
 def testQueryResultPreBinding(self):
     """
     Test a simple query with pre-bound result value
     """
     report = (
         { 'report':
           { 'query':  prefixes+"SELECT * WHERE { ?s dcterms:creator ?creator; rdfs:label ?label }"
           , 'output': "Hello %(creator)s"
           }
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(simple_test_data)
     RdfReport.generate_report(report, rdfgraph, {}, outstr)
     self.assertEqual("Hello Graham", outstr.getvalue())
     outstr   = StringIO.StringIO()
     RdfReport.generate_report(report, rdfgraph, {'label': rdflib.Literal('simple-test-data')}, outstr)
     self.assertEqual("Hello Graham", outstr.getvalue())
     return
Exemplo n.º 14
0
 def testTrafficlightHTML(self):
     """
     Test report generating traffic-light HTML (per data/mockup.html)
     """
     rouristr  = "file:///usr/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/"
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(trafficlight_test_data)
     RdfReport.generate_report(TrafficLightReports.EvalChecklistHtml, rdfgraph, {}, outstr)
     # Test the non-item output only.  The previous test checks itemized output.
     expected = (
       [ '''<title>Research Object Runnable evaluation - simple-requirements</title>'''
       , '''</head>'''
       , '''<body>'''
       , '''<div class="Container">'''
       , '''<div class="header">'''
       , '''A simple test RO'''
       , '''</div>'''
       , '''<div class="content">'''
       , '''<div class="sub_header">A simple RO used for testing traffic light display.</div>'''
       , '''<div class="body">'''
       , '''<table>'''
       , '''<thead>'''
       , '''<tr class="main_result">'''
       , '''<th class="trafficlight large fail should"><div/></th>'''
       , '''<th colspan="2">Target <span class="target">'''
       , '''<a href="%s">simple-requirements</a></span>'''%(rouristr)
       , '''<span class="testresult">minimally satisfies</span> checklist for'''
       , '''<span class="testpurpose">Runnable</span>.'''
       # , '''<p>This Research Object @@TODO.</p>'''
       , '''</th>'''
       , '''</tr>'''
       ])
     result = outstr.getvalue()
     #print "\n-----"
     #print result
     #print "-----"
     resultlines = result.split('\n')
     for i in range(len(expected)):
         # Skip 1st 8 lines of generated HTML:
         self.assertEqual(expected[i], resultlines[i+8].strip())
     return
Exemplo n.º 15
0
 def testRepetition(self):
     """
     Test a report with a repeated match
     """
     report = (
         { 'report':
           [ { 'output': "Tags: " }
           , { 'query':  prefixes+"SELECT * WHERE { ?s dcterms:creator ?creator; ex:tag ?tag } ORDER BY ?tag"
             , 'output': "%(tag)s"
             , 'sep':    ", "
             }
           , { 'output': "." }
           ]
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(simple_test_data)
     RdfReport.generate_report(report, rdfgraph, {}, outstr)
     self.assertEqual("Tags: tag1, tag2, tag3, tag4.", outstr.getvalue())
     return
Exemplo n.º 16
0
 def testReportEvalResultClass(self):
     """
     Test report of a textual status summary of a checklist match
     """
     rouristr  = "file:///usr/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/"
     checklist = "file:///usr/workspace/wf4ever-ro-manager/Checklists/runnable-wf-trafficlight/checklist.rdf"
     initvars  = (
         { 'target': rdflib.URIRef(rouristr)
         , 'minim':  rdflib.URIRef(checklist+"#Runnable_model") 
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(trafficlight_test_data)
     RdfReport.generate_report(TrafficLightReports.EvalTargetResultClass, rdfgraph, initvars, outstr)
     expected = '"fail", "should"'
     result = outstr.getvalue()
     # print "\n-----"
     # print result
     # print "-----"
     self.assertEqual(expected, result)
     return
Exemplo n.º 17
0
 def testReportEvalResultLabel(self):
     """
     Test report that selects a result label string
     """
     rouristr  = "file:///usr/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/"
     checklist = "file:///usr/workspace/wf4ever-ro-manager/Checklists/runnable-wf-trafficlight/checklist.rdf"
     initvars  = (
         { 'target': rdflib.URIRef(rouristr)
         , 'minim':  rdflib.URIRef(checklist+"#Runnable_model") 
         })
     outstr   = StringIO.StringIO()
     rdfgraph = rdflib.Graph()
     rdfgraph.parse(trafficlight_test_data)
     RdfReport.generate_report(TrafficLightReports.EvalTargetResultLabel, rdfgraph, initvars, outstr)
     expected = "minimally satisfies"
     result = outstr.getvalue()
     # print "\n-----"
     # print result
     # print "-----"
     self.assertEqual(expected, result)
     return
Exemplo n.º 18
0
 def testEscapeJSON(self):
     s = []
     for i in range(0,128):
         s.append(unichr(i))
     s = "".join(s)
     s_esc = RdfReport.escape_json(s)
     e_esc = ( u'\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007'+
               u'\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f'+
               u'\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017'+
               u'\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f'+
               u' !\\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`'+
               u'abcdefghijklmnopqrstuvwxyz{|}~\\u007f')
     # print "----"
     # print repr(s_esc)
     # print repr(e_esc)
     self.assertEqual(s_esc, e_esc)
     s_loads = json.loads('"'+s_esc+'"')
     self.assertEqual(s_loads, s)
     return