Coverage for tests/test_translate_header.py: 16%

82 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2022-09-07 09:25 +0000

1# This file is part of astro_metadata_translator. 

2# 

3# Developed for the LSST Data Management System. 

4# This product includes software developed by the LSST Project 

5# (http://www.lsst.org). 

6# See the LICENSE file at the top-level directory of this distribution 

7# for details of code ownership. 

8# 

9# Use of this source code is governed by a 3-clause BSD-style 

10# license that can be found in the LICENSE file. 

11 

12import io 

13import os.path 

14import unittest 

15 

16from astro_metadata_translator.bin.translateheader import process_files 

17 

18TESTDIR = os.path.abspath(os.path.dirname(__file__)) 

19TESTDATA = os.path.join(TESTDIR, "data") 

20 

21 

22class TestTranslateHeader(unittest.TestCase): 

23 """Test that the translate_header CLI logic works.""" 

24 

25 def _readlines(self, stream): 

26 """Return the lines written to the stream. 

27 

28 Parameters 

29 ---------- 

30 stream : `io.StringIO` 

31 The stream to read. 

32 

33 Returns 

34 ------- 

35 lines : `list` of `str` 

36 The lines contained in the stream. 

37 """ 

38 stream.seek(0) 

39 return [ll.rstrip() for ll in stream.readlines()] 

40 

41 def test_translate_header(self): 

42 """Translate some header files.""" 

43 with io.StringIO() as out: 

44 with io.StringIO() as err: 

45 okay, failed = process_files( 

46 [TESTDATA], 

47 r"^fitsheader.*yaml$", 

48 0, 

49 False, 

50 outstream=out, 

51 errstream=err, 

52 output_mode="none", 

53 ) 

54 self.assertEqual(self._readlines(out), []) 

55 lines = self._readlines(err) 

56 self.assertEqual(len(lines), 10) 

57 self.assertTrue(lines[0].startswith("Analyzing"), f"Line: '{lines[0]}'") 

58 

59 self.assertEqual(len(okay), 10) 

60 self.assertEqual(len(failed), 0) 

61 

62 def test_translate_header_table(self): 

63 """Translate some header files with table output.""" 

64 with io.StringIO() as out: 

65 with io.StringIO() as err: 

66 okay, failed = process_files( 

67 [TESTDATA], r"^fitsheader.*yaml$", 0, False, outstream=out, errstream=err 

68 ) 

69 output = self._readlines(out) 

70 self.assertTrue(output[0].startswith("ObsId")) 

71 self.assertTrue(output[1].startswith("-------")) 

72 self.assertEqual(len(output), 12) 

73 errlines = self._readlines(err) 

74 self.assertEqual(len(errlines), 0) 

75 

76 self.assertEqual(len(okay), 10) 

77 self.assertEqual(len(failed), 0) 

78 

79 def test_translate_header_fails(self): 

80 """Translate some header files that fail.""" 

81 with io.StringIO() as out: 

82 with io.StringIO() as err: 

83 okay, failed = process_files( 

84 [TESTDATA], r"^.*yaml$", 0, False, outstream=out, errstream=err, output_mode="none" 

85 ) 

86 

87 lines = self._readlines(out) 

88 self.assertEqual(len(lines), len(failed)) 

89 self.assertTrue(lines[0].startswith("Failure processing"), f"Line: '{lines[0]}'") 

90 self.assertIn("not a mapping", lines[0], f"Line: '{lines[0]}'") 

91 

92 lines = self._readlines(err) 

93 self.assertEqual(len(lines), 13) 

94 self.assertTrue(lines[0].startswith("Analyzing"), f"Line: '{lines[0]}'") 

95 

96 self.assertEqual(len(okay), 10) 

97 self.assertEqual(len(failed), 3) 

98 

99 def test_translate_header_traceback(self): 

100 """Translate some header files that fail and trigger traceback""" 

101 with io.StringIO() as out: 

102 with io.StringIO() as err: 

103 okay, failed = process_files( 

104 [TESTDATA], r"^.*yaml$", 0, True, outstream=out, errstream=err, output_mode="none" 

105 ) 

106 

107 lines = self._readlines(out) 

108 self.assertEqual(len(lines), 22) 

109 self.assertTrue(lines[0].startswith("Traceback"), f"Line '{lines[0]}'") 

110 

111 lines = self._readlines(err) 

112 self.assertEqual(len(lines), 13) 

113 self.assertTrue(lines[0].startswith("Analyzing"), f"Line: '{lines[0]}'") 

114 

115 self.assertEqual(len(okay), 10) 

116 self.assertEqual(len(failed), 3) 

117 

118 def test_translate_header_dump(self): 

119 """Check that a header is dumped""" 

120 with io.StringIO() as out: 

121 with io.StringIO() as err: 

122 okay, failed = process_files( 

123 [os.path.join(TESTDATA, "fitsheader-decam.yaml")], 

124 r"^fitsheader.*yaml$", 

125 0, 

126 False, 

127 outstream=out, 

128 errstream=err, 

129 output_mode="yaml", 

130 ) 

131 

132 lines = self._readlines(out) 

133 # Look for a DECam header in the output 

134 header = "\n".join(lines) 

135 self.assertIn("DTINSTRU", header) 

136 

137 lines = self._readlines(err) 

138 self.assertEqual(len(lines), 1) 

139 self.assertTrue(lines[0], "Analyzing tests/data/fitsheader-decam.yaml...") 

140 

141 self.assertEqual(len(okay), 1) 

142 self.assertEqual(len(failed), 0) 

143 

144 def test_translate_header_loud(self): 

145 """Check that ObservationInfo content is displayed""" 

146 with io.StringIO() as out: 

147 with io.StringIO() as err: 

148 okay, failed = process_files( 

149 [os.path.join(TESTDATA, "fitsheader-decam.yaml")], 

150 r"^fitsheader.*yaml$", 

151 0, 

152 False, 

153 outstream=out, 

154 errstream=err, 

155 output_mode="verbose", 

156 ) 

157 

158 lines = self._readlines(out) 

159 # Look for the translated DECam header in the output 

160 self.assertEqual(lines[2], "datetime_begin: 2013-09-01T06:02:55.754") 

161 

162 lines = self._readlines(err) 

163 self.assertEqual(len(lines), 1) 

164 self.assertTrue(lines[0], "Analyzing tests/data/fitsheader-decam.yaml...") 

165 

166 self.assertEqual(len(okay), 1) 

167 self.assertEqual(len(failed), 0) 

168 

169 

170if __name__ == "__main__": 170 ↛ 171line 170 didn't jump to line 171, because the condition on line 170 was never true

171 unittest.main()