source: sasview/test/sasdataloader/test/utest_generic_file_reader_class.py @ a78446ce

magnetic_scattrelease-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249unittest-saveload
Last change on this file since a78446ce was 4a8d55c, checked in by krzywon, 6 years ago

Propagate through loader when errors are thrown regardless of the error. Add tests using the same file with different extensions (including deprecated extensions).

  • Property mode set to 100644
File size: 3.6 KB
Line 
1"""
2    Unit tests for the generic file reader class
3"""
4
5import os
6import unittest
7import logging
8import numpy as np
9
10from sas.sascalc.dataloader.data_info import DataInfo, plottable_1D, Data1D
11from sas.sascalc.dataloader.loader import Loader
12from sas.sascalc.dataloader.loader_exceptions import NoKnownLoaderException
13from sas.sascalc.dataloader.file_reader_base_class import FileReader
14
15logger = logging.getLogger(__name__)
16
17
18def find(filename):
19    return os.path.join(os.path.dirname(__file__), filename)
20
21
22class GenericFileReaderTests(unittest.TestCase):
23
24    def setUp(self):
25        self.reader = TestFileReader()
26        self.bad_file = find("ACB123.txt")
27        self.good_file = find("123ABC.txt")
28        self.generic_reader = Loader()
29        self.deprecated_file_type = find("FEB18012.ASC")
30
31    def test_bad_file_path(self):
32        self.assertRaises(NoKnownLoaderException, self.reader.read,
33                          self.bad_file)
34
35    def test_good_file_path(self):
36        f = open(self.good_file, 'w')
37        f.write('123ABC exists!')
38        f.close()
39        output = self.reader.read(self.good_file)
40        self.assertEqual(len(output), 1)
41        self.assertEqual(output[0].meta_data["blah"], '123ABC exists!')
42
43    def test_old_file_types(self):
44        f = self.generic_reader.load(self.deprecated_file_type)
45        last_f = f[0]
46        if hasattr(last_f, "errors"):
47            self.assertEquals(len(last_f.errors), 1)
48        else:
49            self.fail("Errors did not propogate to the file properly.")
50
51    def test_same_file_unknown_extensions(self):
52        # Five files, all with the same content, but different file extensions
53        no_ext = find("test_data//TestExtensions")
54        not_xml = find("test_data//TestExtensions.notxml")
55        # Deprecated extensions
56        asc_dep = find("test_data//TestExtensions.asc")
57        nxs_dep = find("test_data//TestExtensions.nxs")
58        # Native extension as a baseline
59        xml_native = find("test_data//TestExtensions.xml")
60        # Load the files and check contents
61        no_ext_load = self.generic_reader.load(no_ext)
62        asc_load = self.generic_reader.load(asc_dep)
63        nxs_load = self.generic_reader.load(nxs_dep)
64        not_xml_load = self.generic_reader.load(not_xml)
65        xml_load = self.generic_reader.load(xml_native)
66        self.check_unknown_extension(no_ext_load[0])
67        self.check_unknown_extension(asc_load[0])
68        self.check_unknown_extension(nxs_load[0])
69        self.check_unknown_extension(not_xml_load[0])
70        self.check_unknown_extension(xml_load[0])
71        # Be sure the deprecation warning is passed with the file
72        self.assertEquals(len(asc_load[0].errors), 1)
73        self.assertEquals(len(nxs_load[0].errors), 1)
74
75    def check_unknown_extension(self, data):
76        self.assertTrue(isinstance(data, Data1D))
77        self.assertEquals(len(data.x), 138)
78        self.assertEquals(data.sample.ID, "TK49 c10_SANS")
79        self.assertEquals(data.meta_data["loader"], "CanSAS XML 1D")
80
81    def tearDown(self):
82        if os.path.isfile(self.bad_file):
83            os.remove(self.bad_file)
84        if os.path.isfile(self.good_file):
85            os.remove(self.good_file)
86
87class TestFileReader(FileReader):
88    def get_file_contents(self):
89        """
90        Reader specific class to access the contents of the file
91        All reader classes that inherit from FileReader must implement
92        """
93        x = np.zeros(0)
94        y = np.zeros(0)
95        self.current_dataset = plottable_1D(x,y)
96        self.current_datainfo = DataInfo()
97        self.current_datainfo.meta_data["blah"] = self.nextline()
98        self.send_to_output()
Note: See TracBrowser for help on using the repository browser.