1 2# Copyright (c) 2014 Ahmed H. Ismail 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# http://www.apache.org/licenses/LICENSE-2.0 7# Unless required by applicable law or agreed to in writing, software 8# distributed under the License is distributed on an "AS IS" BASIS, 9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10# See the License for the specific language governing permissions and 11# limitations under the License. 12 13from __future__ import absolute_import 14from __future__ import print_function 15from __future__ import unicode_literals 16 17import codecs 18import os 19import tempfile 20from unittest import TestCase 21 22from spdx.parsers.rdf import Parser as RDFParser 23from spdx.parsers.rdfbuilders import Builder as RDFBuilder 24from spdx.parsers.loggers import StandardLogger 25from spdx.parsers.tagvalue import Parser as TVParser 26from spdx.parsers.tagvaluebuilders import Builder as TVBuilder 27from spdx.parsers.jsonparser import Parser as JSONParser 28from spdx.parsers.yamlparser import Parser as YAMLParser 29from spdx.parsers.xmlparser import Parser as XMLParser 30from spdx.parsers.jsonyamlxmlbuilders import Builder as JSONYAMLXMLBuilder 31import spdx.writers.rdf as rdfwriter 32import spdx.writers.tagvalue as tvwriter 33import spdx.writers.json as jsonwriter 34import spdx.writers.yaml as yamlwriter 35import spdx.writers.xml as xmlwriter 36 37from tests import utils_test 38 39 40def get_temp_file(extension=''): 41 """ 42 Return a unique new temporary file location to a non-existing 43 temporary file that can safely be created without a risk of name 44 collision. 45 """ 46 47 if extension and not extension.startswith('.'): 48 extension = '.' + extension 49 file_name = 'temp_file' + extension 50 temp_dir = tempfile.mkdtemp() 51 return os.path.join(temp_dir, file_name) 52 53 54class TestConversions(TestCase): 55 maxDiff = None 56 57 def parse_rdf_file(self, file_name): 58 with open(file_name, mode='rb') as infile: 59 rdfparser = RDFParser(RDFBuilder(), StandardLogger()) 60 doc, error = rdfparser.parse(infile) 61 assert not error 62 assert doc.validate([]) == [] 63 return doc 64 65 def parse_tagvalue_file(self, file_name): 66 with open(file_name, mode='r') as infile: 67 tvparser = TVParser(TVBuilder(), StandardLogger()) 68 tvparser.build() 69 doc, error = tvparser.parse(infile.read()) 70 assert not error 71 assert doc.validate([]) == [] 72 return doc 73 74 def parse_json_file(self, file_name): 75 with open(file_name, mode='r') as infile: 76 jsonparser = JSONParser(JSONYAMLXMLBuilder(), StandardLogger()) 77 doc, error = jsonparser.parse(infile) 78 assert not error 79 assert doc.validate([]) == [] 80 return doc 81 82 def parse_yaml_file(self, file_name): 83 with open(file_name, mode='r') as infile: 84 yamlparser = YAMLParser(JSONYAMLXMLBuilder(), StandardLogger()) 85 doc, error = yamlparser.parse(infile) 86 assert not error 87 assert doc.validate([]) == [] 88 return doc 89 90 def parse_xml_file(self, file_name): 91 with open(file_name, mode='r') as infile: 92 xmlparser = XMLParser(JSONYAMLXMLBuilder(), StandardLogger()) 93 doc, error = xmlparser.parse(infile) 94 assert not error 95 assert doc.validate([]) == [] 96 return doc 97 98 def write_tagvalue_file(self, document, file_name): 99 with codecs.open(file_name, mode='w', encoding='utf-8') as out: 100 tvwriter.write_document(document, out) 101 102 def write_rdf_file(self, document, file_name): 103 with open(file_name, mode='wb') as out: 104 rdfwriter.write_document(document, out) 105 106 def write_json_file(self, document, file_name): 107 with open(file_name, mode='w') as out: 108 jsonwriter.write_document(document, out) 109 110 def write_yaml_file(self, document, file_name): 111 with open(file_name, mode='w') as out: 112 yamlwriter.write_document(document, out) 113 114 def write_xml_file(self, document, file_name): 115 with open(file_name, mode='w') as out: 116 xmlwriter.write_document(document, out) 117 118 def test_tagvalue_rdf(self): 119 doc = self.parse_tagvalue_file(utils_test.get_test_loc('formats/SPDXTagExample.tag')) 120 filename = get_temp_file('.rdf') 121 self.write_rdf_file(doc, filename) 122 self.parse_rdf_file(filename) 123 124 def test_json_rdf(self): 125 doc = self.parse_json_file(utils_test.get_test_loc('formats/SPDXJsonExample.json')) 126 filename = get_temp_file('.rdf') 127 self.write_rdf_file(doc, filename) 128 self.parse_rdf_file(filename) 129 130 def test_yaml_rdf(self): 131 doc = self.parse_yaml_file(utils_test.get_test_loc('formats/SPDXYamlExample.yaml')) 132 filename = get_temp_file('.rdf') 133 self.write_rdf_file(doc, filename) 134 self.parse_rdf_file(filename) 135 136 def test_xml_rdf(self): 137 doc = self.parse_xml_file(utils_test.get_test_loc('formats/SPDXXmlExample.xml')) 138 filename = get_temp_file('.rdf') 139 self.write_rdf_file(doc, filename) 140 self.parse_rdf_file(filename) 141 142 def test_rdf_rdf(self): 143 doc = self.parse_rdf_file(utils_test.get_test_loc('formats/SPDXRdfExample.rdf')) 144 filename = get_temp_file('.rdf') 145 self.write_rdf_file(doc, filename) 146 self.parse_rdf_file(filename) 147 148 def test_tagvalue_tagvalue(self): 149 doc = self.parse_tagvalue_file(utils_test.get_test_loc('formats/SPDXTagExample.tag')) 150 filename = get_temp_file('.tag') 151 self.write_tagvalue_file(doc, filename) 152 self.parse_tagvalue_file(filename) 153 154 def test_rdf_tagvalue(self): 155 doc = self.parse_rdf_file(utils_test.get_test_loc('formats/SPDXRdfExample.rdf')) 156 filename = get_temp_file('.tag') 157 self.write_tagvalue_file(doc, filename) 158 self.parse_tagvalue_file(filename) 159 160 def test_json_tagvalue(self): 161 doc = self.parse_json_file(utils_test.get_test_loc('formats/SPDXJsonExample.json')) 162 filename = get_temp_file('.tag') 163 self.write_tagvalue_file(doc, filename) 164 self.parse_tagvalue_file(filename) 165 166 def test_yaml_tagvalue(self): 167 doc = self.parse_yaml_file(utils_test.get_test_loc('formats/SPDXYamlExample.yaml')) 168 filename = get_temp_file('.tag') 169 self.write_tagvalue_file(doc, filename) 170 self.parse_tagvalue_file(filename) 171 172 def test_xml_tagvalue(self): 173 doc = self.parse_xml_file(utils_test.get_test_loc('formats/SPDXXmlExample.xml')) 174 filename = get_temp_file('.tag') 175 self.write_tagvalue_file(doc, filename) 176 self.parse_tagvalue_file(filename) 177 178 def test_tagvalue_json(self): 179 doc = self.parse_tagvalue_file(utils_test.get_test_loc('formats/SPDXTagExample.tag')) 180 filename = get_temp_file('.json') 181 self.write_json_file(doc, filename) 182 self.parse_json_file(filename) 183 184 def test_rdf_json(self): 185 doc = self.parse_rdf_file(utils_test.get_test_loc('formats/SPDXRdfExample.rdf')) 186 filename = get_temp_file('.json') 187 self.write_json_file(doc, filename) 188 self.parse_json_file(filename) 189 190 def test_yaml_json(self): 191 doc = self.parse_yaml_file(utils_test.get_test_loc('formats/SPDXYamlExample.yaml')) 192 filename = get_temp_file('.json') 193 self.write_json_file(doc, filename) 194 self.parse_json_file(filename) 195 196 def test_xml_json(self): 197 doc = self.parse_xml_file(utils_test.get_test_loc('formats/SPDXXmlExample.xml')) 198 filename = get_temp_file('.json') 199 self.write_json_file(doc, filename) 200 self.parse_json_file(filename) 201 202 def test_json_json(self): 203 doc = self.parse_json_file(utils_test.get_test_loc('formats/SPDXJsonExample.json')) 204 filename = get_temp_file('.json') 205 self.write_json_file(doc, filename) 206 self.parse_json_file(filename) 207 208 def test_tagvalue_yaml(self): 209 doc = self.parse_tagvalue_file(utils_test.get_test_loc('formats/SPDXTagExample.tag')) 210 filename = get_temp_file('.yaml') 211 self.write_yaml_file(doc, filename) 212 self.parse_yaml_file(filename) 213 214 def test_rdf_yaml(self): 215 doc = self.parse_rdf_file(utils_test.get_test_loc('formats/SPDXRdfExample.rdf')) 216 filename = get_temp_file('.yaml') 217 self.write_yaml_file(doc, filename) 218 self.parse_yaml_file(filename) 219 220 def test_json_yaml(self): 221 doc = self.parse_json_file(utils_test.get_test_loc('formats/SPDXJsonExample.json')) 222 filename = get_temp_file('.yaml') 223 self.write_yaml_file(doc, filename) 224 self.parse_yaml_file(filename) 225 226 def test_xml_yaml(self): 227 doc = self.parse_xml_file(utils_test.get_test_loc('formats/SPDXXmlExample.xml')) 228 filename = get_temp_file('.yaml') 229 self.write_yaml_file(doc, filename) 230 self.parse_yaml_file(filename) 231 232 def test_yaml_yaml(self): 233 doc = self.parse_yaml_file(utils_test.get_test_loc('formats/SPDXYamlExample.yaml')) 234 filename = get_temp_file('.yaml') 235 self.write_yaml_file(doc, filename) 236 self.parse_yaml_file(filename) 237 238 def test_tagvalue_xml(self): 239 doc = self.parse_tagvalue_file(utils_test.get_test_loc('formats/SPDXTagExample.tag')) 240 filename = get_temp_file('.xml') 241 self.write_xml_file(doc, filename) 242 self.parse_xml_file(filename) 243 244 def test_rdf_xml(self): 245 doc = self.parse_rdf_file(utils_test.get_test_loc('formats/SPDXRdfExample.rdf')) 246 filename = get_temp_file('.xml') 247 self.write_xml_file(doc, filename) 248 self.parse_xml_file(filename) 249 250 def test_json_xml(self): 251 doc = self.parse_json_file(utils_test.get_test_loc('formats/SPDXJsonExample.json')) 252 filename = get_temp_file('.xml') 253 self.write_xml_file(doc, filename) 254 self.parse_xml_file(filename) 255 256 def test_yaml_xml(self): 257 doc = self.parse_yaml_file(utils_test.get_test_loc('formats/SPDXYamlExample.yaml')) 258 filename = get_temp_file('.xml') 259 self.write_xml_file(doc, filename) 260 self.parse_xml_file(filename) 261 262 def test_xml_xml(self): 263 doc = self.parse_xml_file(utils_test.get_test_loc('formats/SPDXXmlExample.xml')) 264 filename = get_temp_file('.xml') 265 self.write_xml_file(doc, filename) 266 self.parse_xml_file(filename) 267