|
1
|
|
|
# -*- coding: utf-8 -*- |
|
2
|
|
|
from __future__ import division, absolute_import, unicode_literals, print_function |
|
3
|
|
|
|
|
4
|
|
|
import subprocess |
|
5
|
|
|
import numpy as np |
|
6
|
|
|
import os |
|
7
|
|
|
import pytest |
|
8
|
|
|
from sys import version_info |
|
9
|
|
|
|
|
10
|
|
|
import aacgmv2 |
|
11
|
|
|
|
|
12
|
|
|
class TestCmdAACGMV2: |
|
13
|
|
|
def setup(self): |
|
14
|
|
|
"""Runs before every method to create a clean testing setup""" |
|
15
|
|
|
self.test_dir = os.path.join(aacgmv2.__path__[0], 'tests', 'test_data') |
|
16
|
|
|
self.output = os.path.join(self.test_dir, "output.txt") |
|
17
|
|
|
self.convert = os.path.join(self.test_dir, "test_convert.txt") |
|
18
|
|
|
self.single = os.path.join(self.test_dir, |
|
19
|
|
|
'test_convert_single_line.txt') |
|
20
|
|
|
self.mlt = os.path.join(self.test_dir, 'test_convert_mlt.txt') |
|
21
|
|
|
self.mlt_single = os.path.join(self.test_dir, |
|
22
|
|
|
'test_convert_mlt_single_line.txt') |
|
23
|
|
|
self.rtol = 1.0e-4 |
|
24
|
|
|
|
|
25
|
|
|
def teardown(self): |
|
26
|
|
|
"""Runs after every method to clean up previous testing""" |
|
27
|
|
|
if os.path.isfile(self.output): |
|
28
|
|
|
os.remove(self.output) |
|
29
|
|
|
|
|
30
|
|
|
del self.test_dir, self.output, self.convert, self.single, self.mlt |
|
31
|
|
|
del self.mlt_single, self.rtol |
|
32
|
|
|
|
|
33
|
|
|
@pytest.mark.parametrize('pin,ref', |
|
34
|
|
|
[([], [[57.4810, 93.5290, 1.04566], |
|
35
|
|
|
[58.5380, 93.9324, 1.0456], |
|
36
|
|
|
[59.5900, 94.3614, 1.04556]]), |
|
37
|
|
|
(['-v'], [[51.6616, -66.6338, 306.1783], |
|
38
|
|
|
[52.6792, -66.7291, 306.5470], |
|
39
|
|
|
[53.6980, -66.8286, 306.91265]]), |
|
40
|
|
|
(['-g'], [[57.6746, 93.6036, 1.0471], |
|
41
|
|
|
[58.7271, 94.0102, 1.0471], |
|
42
|
|
|
[59.7743, 94.4425, 1.0471]]), |
|
43
|
|
|
(['-t'], [[57.4785, 93.5398, 1.04566], |
|
44
|
|
|
[58.5354, 93.9438, 1.04561], |
|
45
|
|
|
[59.5873, 94.3731, 1.04556]]), |
|
46
|
|
|
(['-t', '-v'], [[51.6524, -66.6180, 306.1750], |
|
47
|
|
|
[52.6738, -66.7167, 306.5451], |
|
48
|
|
|
[53.6964, -66.8202, 306.9121]])]) |
|
49
|
|
|
def test_convert_command_line(self, pin, ref): |
|
50
|
|
|
""" Test the output from the command line routine""" |
|
51
|
|
|
p_commands = ['python', '-m', 'aacgmv2', 'convert', '-i', |
|
52
|
|
|
self.convert, '-d', '20150224', '-o', |
|
53
|
|
|
self.output] |
|
54
|
|
|
p_commands.extend(pin) |
|
55
|
|
|
p = subprocess.Popen(p_commands) |
|
56
|
|
|
p.communicate() |
|
57
|
|
|
p.wait() |
|
58
|
|
|
data = np.loadtxt(self.output) |
|
59
|
|
|
np.testing.assert_allclose(data, ref, rtol=self.rtol) |
|
60
|
|
|
|
|
61
|
|
|
@pytest.mark.skip(version_info.major == 3, |
|
62
|
|
|
reason='only works locally for Python 3') |
|
63
|
|
|
def test_convert_today(self): |
|
64
|
|
|
""" Test the shape of the output for today's date """ |
|
65
|
|
|
p = subprocess.Popen(['python', '-m', 'aacgmv2', 'convert', '-i', |
|
66
|
|
|
self.convert, '-o', self.output]) |
|
67
|
|
|
p.communicate() |
|
68
|
|
|
p.wait() |
|
69
|
|
|
data = np.loadtxt(self.output) |
|
70
|
|
|
assert data.shape == (3,3) |
|
71
|
|
|
|
|
72
|
|
|
def test_convert_single_line(self): |
|
73
|
|
|
""" Test the command line with a single line as input """ |
|
74
|
|
|
p = subprocess.Popen(['python', '-m', 'aacgmv2', 'convert', '-i', |
|
75
|
|
|
self.single, '-d', '20150224', '-o', self.output]) |
|
76
|
|
|
p.communicate() |
|
77
|
|
|
p.wait() |
|
78
|
|
|
data = np.loadtxt(self.output) |
|
79
|
|
|
np.testing.assert_allclose(data, [57.4810, 93.5290, 1.04566], |
|
80
|
|
|
rtol=self.rtol) |
|
81
|
|
|
|
|
82
|
|
|
def test_convert_stdin_stdout(self): |
|
83
|
|
|
p = subprocess.Popen( |
|
84
|
|
|
'echo 60 15 300 | python -m aacgmv2 convert -d 20150224', |
|
85
|
|
|
shell=True, stdout=subprocess.PIPE) |
|
86
|
|
|
stdout, _ = p.communicate() |
|
87
|
|
|
p.wait() |
|
88
|
|
|
assert b'57.48099198 93.52895314' in stdout |
|
89
|
|
|
|
|
90
|
|
|
@pytest.mark.parametrize('pin,ref', |
|
91
|
|
|
[([], [9.0912, 9.8246, 10.5579]), |
|
92
|
|
|
(['-v'], [-120.3687, 44.6313, -150.3687]) |
|
93
|
|
|
]) |
|
94
|
|
|
def test_convert_mlt_command_line(self, pin, ref): |
|
95
|
|
|
""" Test the command line MLT conversion options""" |
|
96
|
|
|
p_command = ['python', '-m', 'aacgmv2', 'convert_mlt', '-i', |
|
97
|
|
|
self.mlt, '20150224140015', '-o', self.output] |
|
98
|
|
|
p_command.extend(pin) |
|
99
|
|
|
p = subprocess.Popen(p_command) |
|
100
|
|
|
p.communicate() |
|
101
|
|
|
p.wait() |
|
102
|
|
|
data = np.loadtxt(self.output) |
|
103
|
|
|
np.testing.assert_allclose(data, ref, rtol=self.rtol) |
|
104
|
|
|
|
|
105
|
|
|
|
|
106
|
|
|
def test_convert_mlt_single_line(self): |
|
107
|
|
|
p = subprocess.Popen(['python', '-m', 'aacgmv2', 'convert_mlt', '-i', |
|
108
|
|
|
self.mlt_single, '20150224140015', '-o', |
|
109
|
|
|
self.output]) |
|
110
|
|
|
p.communicate() |
|
111
|
|
|
p.wait() |
|
112
|
|
|
data = np.loadtxt(self.output) |
|
113
|
|
|
np.testing.assert_allclose(data, 9.0912, rtol=self.rtol) |
|
114
|
|
|
|
|
115
|
|
|
@pytest.mark.parametrize('echo_command', |
|
116
|
|
|
[('echo 12 | python -m aacgmv2 convert_mlt -v 20150224140015'), |
|
117
|
|
|
('echo 12 | python -m aacgmv2 convert_mlt 20150224140015 -v')]) |
|
118
|
|
|
def test_convert_mlt_stdin_stdout(self, echo_command): |
|
119
|
|
|
p = subprocess.Popen(echo_command, shell=True, stdout=subprocess.PIPE) |
|
120
|
|
|
stdout, _ = p.communicate() |
|
121
|
|
|
p.wait() |
|
122
|
|
|
assert b'44.63126817' in stdout |
|
123
|
|
|
|