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
|
|
|
|