1from grass.gunittest.case import TestCase
2from grass.gunittest.main import test
3from grass.gunittest.gmodules import SimpleModule
4import grass.script.core as gcore
5
6# not used yet
7LOCATION = 'nc_spm'
8
9output1 = """
10 0.000000 88.370453
11 10.000000 88.397057
12 20.000000 89.526253
13 30.000000 89.677551
14 40.000000 91.297195
15 50.000000 91.297195
16 60.000000 92.330658
17 70.000000 93.069199
18 80.000000 94.768280
19 90.000000 95.524551
20 100.000000 96.770805
21 110.000000 96.770805
22 120.000000 97.418869
23"""
24
25output2 = """
26637656.000000 224222.000000 0.000000 88.370453
27637664.540486 224227.201932 10.000000 88.397057
28637673.080972 224232.403865 20.000000 89.526253
29637681.621458 224237.605797 30.000000 89.677551
30637690.161944 224242.807729 40.000000 91.297195
31637698.702430 224248.009662 50.000000 91.297195
32637707.242916 224253.211594 60.000000 92.330658
33637715.783402 224258.413526 70.000000 93.069199
34637724.323887 224263.615459 80.000000 94.768280
35637732.864373 224268.817391 90.000000 95.524551
36637741.404859 224274.019323 100.000000 96.770805
37637749.945345 224279.221256 110.000000 96.770805
38637758.485831 224284.423188 120.000000 97.418869
39"""
40
41output3 = """
42 0.000000 91.071831
43 10.000000 91.431198
44 20.000000 91.746628
45 30.000000 91.746628
46 40.000000 91.748047
47 50.000000 91.872192
48 60.000000 91.730049
49 70.000000 91.690292
50 80.000000 91.341331
51 86.533231 91.341331
52 96.533231 91.639000
53 106.533231 nodata
54 116.533231 nodata
55 126.533231 nodata
56 136.533231 nodata
57 146.533231 nodata
58 156.533231 nodata
59 166.533231 nodata
60 176.533231 nodata
61 186.533231 nodata
62 196.533231 nodata
63 206.533231 nodata
64 216.533231 nodata
65"""
66
67output4 = """
68 0.000000 88.370453
69 25.000000 89.526253
70 50.000000 91.297195
71 75.000000 94.768280
72 100.000000 96.770805
73 125.000000 97.646629
74"""
75
76output5 = """
77635747.000000 222664.000000 0.000000 117.672462
78635738.870095 222669.822770 10.000000 116.417213
79635730.740190 222675.645539 20.000000 115.639481
80635722.610285 222681.468309 30.000000 112.835342
81635714.480381 222687.291079 40.000000 111.324890
82635706.350476 222693.113848 50.000000 108.612282
83635698.220571 222698.936618 60.000000 106.313347
84635690.090666 222704.759388 70.000000 104.915665
85635681.960761 222710.582158 80.000000 102.878601
86635673.830856 222716.404927 90.000000 102.935074
87635673.000000 222717.000000 91.021975 102.935074
88635665.017450 222710.976803 101.021975 102.932213
89635657.034900 222704.953607 111.021975 102.931152
90635649.052351 222698.930410 121.021975 102.932213
91635641.069801 222692.907213 131.021975 102.932213
92635633.087251 222686.884017 141.021975 102.931648
93635625.104701 222680.860820 151.021975 102.936768
94635617.122151 222674.837623 161.021975 102.903358
95635609.139601 222668.814427 171.021975 105.447823
96635601.157052 222662.791230 181.021975 105.447823
97635593.174502 222656.768033 191.021975 108.423523
98635585.191952 222650.744836 201.021975 109.192360
99635577.209402 222644.721640 211.021975 112.042763
100635569.226852 222638.698443 221.021975 114.321136
101635563.000000 222634.000000 228.822556 114.321136
102635569.507914 222626.407434 238.822556 115.357292
103635576.015827 222618.814868 248.822556 114.609100
104635582.523741 222611.222302 258.822556 111.636292
105635589.031655 222603.629736 268.822556 112.355431
106635595.539569 222596.037170 278.822556 110.162842
107635602.047482 222588.444604 288.822556 109.172668
108635608.555396 222580.852038 298.822556 109.172668
109635615.063310 222573.259472 308.822556 108.030540
110635621.571224 222565.666906 318.822556 105.670113
111635628.079137 222558.074340 328.822556 105.770287
112635634.587051 222550.481774 338.822556 105.169937
113635641.000000 222543.000000 348.676634 105.416862
114635647.589446 222550.521915 358.676634 105.011185
115635654.178892 222558.043830 368.676634 104.854263
116635660.768338 222565.565744 378.676634 104.573921
117635667.357784 222573.087659 388.676634 103.413361
118635673.947230 222580.609574 398.676634 105.485588
119635680.536676 222588.131489 408.676634 109.791016
120635687.126122 222595.653403 418.676634 109.701485
121635693.715568 222603.175318 428.676634 112.104370
122635700.305014 222610.697233 438.676634 113.684036
123635706.894460 222618.219148 448.676634 113.684036
124635713.483906 222625.741062 458.676634 114.252579
125635720.073352 222633.262977 468.676634 114.115379
126635726.662798 222640.784892 478.676634 114.123955
127635733.252244 222648.306807 488.676634 115.766998
128635739.841690 222655.828721 498.676634 116.547440
129635746.431136 222663.350636 508.676634 117.672462
130"""
131
132
133class TestProfileNCSPM(TestCase):
134
135    @classmethod
136    def setUpClass(cls):
137        gcore.use_temp_region()
138        gcore.run_command('g.region', raster='elevation')
139
140    @classmethod
141    def tearDownClass(cls):
142        gcore.del_temp_region()
143
144    def test_profile_default(self):
145        rprofile = SimpleModule('r.profile', input='elevation',
146                                coordinates=[637656, 224222, 637766, 224289])
147        self.assertModule(rprofile)
148        self.assertMultiLineEqual(rprofile.outputs.stdout.strip(), output1.strip())
149        self.assertIn('128.798292 [meters]', rprofile.outputs.stderr)  # distance
150        self.assertIn('10 [meters]', rprofile.outputs.stderr)  # resolution
151
152    def test_profile_m(self):
153        rprofile = SimpleModule('r.profile', input='elevation', units='meters',
154                                coordinates=[637656, 224222, 637766, 224289])
155        self.assertModule(rprofile)
156        self.assertIn('128.798292 [meters]', rprofile.outputs.stderr)  # distance
157        self.assertIn('10 [meters]', rprofile.outputs.stderr)  # resolution
158
159    def test_profile_resolution(self):
160        rprofile = SimpleModule('r.profile', input='elevation', resolution=25,
161                                coordinates=[637656, 224222, 637766, 224289])
162        self.assertModule(rprofile)
163        self.assertMultiLineEqual(rprofile.outputs.stdout.strip(), output4.strip())
164        self.assertIn('128.798292 [meters]', rprofile.outputs.stderr)  # distance
165        self.assertIn('25 [meters]', rprofile.outputs.stderr)  # resolution
166
167    def test_profile_ne(self):
168        rprofile = SimpleModule('r.profile', input='elevation', flags='g',
169                                coordinates=[637656, 224222, 637766, 224289])
170        self.assertModule(rprofile)
171        self.assertMultiLineEqual(rprofile.outputs.stdout.strip(), output2.strip())
172
173    def test_profile_region(self):
174        rprofile = SimpleModule('r.profile', input='elevation', null_value='nodata',
175                                coordinates=[644914, 224579, 644986,
176                                             224627, 645091, 224549])
177        self.assertModule(rprofile)
178        self.assertMultiLineEqual(rprofile.outputs.stdout.strip(), output3.strip())
179        self.assertIn("WARNING: Endpoint coordinates are outside of current region settings",
180                      rprofile.outputs.stderr)
181
182    def test_profile_directions(self):
183        rprofile = SimpleModule('r.profile', input='elevation', flags='g',
184                                coordinates=[635747, 222664, 635673, 222717, 635563,
185                                             222634, 635641, 222543, 635747, 222664])
186        self.assertModule(rprofile)
187        self.assertMultiLineEqual(rprofile.outputs.stdout.strip(), output5.strip())
188
189
190if __name__ == '__main__':
191    test()
192