Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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 os.path 

13import unittest 

14import io 

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([TESTDATA], r"^fitsheader.*yaml$", 0, False, 

46 outstream=out, errstream=err, output_mode="none") 

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

48 lines = self._readlines(err) 

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

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

51 

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

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

54 

55 def test_translate_header_table(self): 

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

57 with io.StringIO() as out: 

58 with io.StringIO() as err: 

59 okay, failed = process_files([TESTDATA], r"^fitsheader.*yaml$", 0, False, 

60 outstream=out, errstream=err) 

61 output = self._readlines(out) 

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

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

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

65 errlines = self._readlines(err) 

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

67 

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

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

70 

71 def test_translate_header_fails(self): 

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

73 with io.StringIO() as out: 

74 with io.StringIO() as err: 

75 okay, failed = process_files([TESTDATA], r"^.*yaml$", 0, False, 

76 outstream=out, errstream=err, output_mode="none") 

77 

78 lines = self._readlines(out) 

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

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

81 

82 lines = self._readlines(err) 

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

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

85 

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

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

88 

89 def test_translate_header_traceback(self): 

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

91 with io.StringIO() as out: 

92 with io.StringIO() as err: 

93 okay, failed = process_files([TESTDATA], r"^.*yaml$", 0, True, 

94 outstream=out, errstream=err, output_mode="none") 

95 

96 lines = self._readlines(out) 

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

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

99 

100 lines = self._readlines(err) 

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

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

103 

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

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

106 

107 def test_translate_header_dump(self): 

108 """Check that a header is dumped""" 

109 with io.StringIO() as out: 

110 with io.StringIO() as err: 

111 okay, failed = process_files([os.path.join(TESTDATA, "fitsheader-decam.yaml")], 

112 r"^fitsheader.*yaml$", 0, False, 

113 outstream=out, errstream=err, output_mode="yaml") 

114 

115 lines = self._readlines(out) 

116 # Look for a DECam header in the output 

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

118 self.assertIn("DTINSTRU", header) 

119 

120 lines = self._readlines(err) 

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

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

123 

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

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

126 

127 def test_translate_header_loud(self): 

128 """Check that ObservationInfo content is displayed""" 

129 with io.StringIO() as out: 

130 with io.StringIO() as err: 

131 okay, failed = process_files([os.path.join(TESTDATA, "fitsheader-decam.yaml")], 

132 r"^fitsheader.*yaml$", 0, False, 

133 outstream=out, errstream=err, output_mode="verbose") 

134 

135 lines = self._readlines(out) 

136 # Look for the translated DECam header in the output 

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

138 

139 lines = self._readlines(err) 

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

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

142 

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

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

145 

146 

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

148 unittest.main()