forked from npshub/mantid
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SettingsTest.py
114 lines (87 loc) · 4.37 KB
/
SettingsTest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Mantid Repository : https://github.com/mantidproject/mantid
#
# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
# NScD Oak Ridge National Laboratory, European Spallation Source,
# Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
# SPDX - License - Identifier: GPL - 3.0 +
import unittest
from isis_reflectometry import settings
from mantid.simpleapi import *
'''
RAII Test helper class. Equivalent to the ScopedFileHelper.
If this proves useful. It would be sensible to make it more accessible for other testing classes.
'''
class TempFile(object):
__tempFile = None
def __init__(self, contents, extension):
import tempfile
self.__tempFile = tempfile.NamedTemporaryFile(delete=False, suffix=extension)
self.__tempFile.write(contents)
self.__tempFile.close()
def __del__(self):
self.clear()
def clear(self):
if os.path.isfile(self.__tempFile.name):
os.remove(self.__tempFile.name)
def pathToFile(self):
return self.__tempFile.name
'''
Determine if all tests should be skipped. Check for the expat module to decide.
'''
def skipAllTests():
skiptests = False
try:
import xml.parsers.expat # noqa
except ImportError:
skiptests = True
return skiptests
if not skipAllTests():
'''
Test suite for the Settings
'''
class SettingsTest(unittest.TestCase):
def test_avalid_file(self):
fileObject = TempFile(contents=b"<SettingList><Setting name='test_setting'>test</Setting></SettingList>",
extension=".xml")
configuration = settings.Settings(fileObject.pathToFile())
entries = configuration.get_all_entries()
self.assertEqual(len(entries), 1, "There is only one setting entry") # Quick check
def test_bad_file_extension_throws(self):
bad_extension = ".txt "
fileObject = TempFile(contents=b"<SettingList><Setting name='test_setting'>test</Setting></SettingList>",
extension=bad_extension)
self.assertRaises(ValueError, settings.Settings, fileObject.pathToFile())
def test_bad_file_location_throws(self):
missing_file = "fictional_file.xml"
self.assertRaises(settings.MissingSettings, settings.Settings, missing_file)
def test_bad_xml_format_throws(self):
fileObject = TempFile(contents=b"<SettingList>invalid xml", extension=".xml")
self.assertRaises(ValueError, settings.Settings, fileObject.pathToFile())
def test_sanity_check_missing_attribute_name_throws(self):
fileObject = TempFile(contents=b"<SettingList><Setting>test</Setting></SettingList>", extension=".xml")
self.assertRaises(ValueError, settings.Settings, fileObject.pathToFile())
def test_sanity_check_missing_attribute_value_throws(self):
fileObject = TempFile(contents=b"<SettingList><Setting name='test_setting'></Setting></SettingList>",
extension=".xml")
self.assertRaises(ValueError, settings.Settings, fileObject.pathToFile())
def test_get_entries(self):
fileObject = TempFile(
contents=b"<SettingList><Setting name='a'>1</Setting><Setting name='b'>2</Setting></SettingList>",
extension=".xml")
configuration = settings.Settings(fileObject.pathToFile())
entries = configuration.get_all_entries()
self.assertEqual(len(entries), 2)
self.assertEqual(int(entries['a']), 1)
self.assertEqual(int(entries['b']), 2)
def test_get_filename(self):
fileObject = TempFile(contents=b"<SettingList></SettingList>", extension=".xml")
configuration = settings.Settings(fileObject.pathToFile())
self.assertEqual(configuration.get_contents_file(), fileObject.pathToFile())
def test_get_named_setting(self):
fileObject = TempFile(contents=b"<SettingList><Setting name='a'>1</Setting></SettingList>",
extension=".xml")
configuration = settings.Settings(fileObject.pathToFile())
self.assertEqual(configuration.get_named_setting('a'), '1')
self.assertRaises(KeyError, configuration.get_named_setting, 'b')
if __name__ == '__main__':
unittest.main()