1 from pathlib
import Path
2 from datetime
import datetime
3 from itertools
import product
4 from logging
import info
6 if '' in sys
.path
: sys
.path
.remove('')
7 sys
.path
.append(str(Path(__file__
).parent
.parent
.parent
))
8 from unittest
import TestCase
9 from shutil
import rmtree
, copy
10 from time
import sleep
11 from os
import system
, remove
, environ
12 from os
.path
import exists
, basename
, join
14 from panda3d
.core
import Filename
15 from lib
.build
.build
import exec_cmd
, _branch
, ver
18 class FunctionalTests(TestCase
):
23 str(Path
.home()) + '/.local/share/pmachines/tests/functional/',
24 str(Path
.home()) + '/.var/app/it.ya2.Pmachines/data/pmachines/tests/functional/',
25 str(Path
.home()) + '/.wine/drive_c/users/flavio/AppData/Local/pmachines/tests/functional/']
27 rmtree(path
, ignore_errors
=True)
29 Filename().get_user_appdata_directory(),
30 '/home/flavio/.var/app/it.ya2.Pmachines/data',
31 '/home/flavio/.wine/drive_c/users/flavio/AppData']
33 'pmachines/options.ini',
34 'pmachines/obs_version.txt']
35 for dir_file
in product(dirs
, files
):
36 _file
= join(*dir_file
)
39 info('%s removed' % _file
)
41 info('%s does not exist' % _file
)
42 system('pkill -f "pmachines.exe"')
45 system('xdotool key shift')
55 path
= 'pmachines/tests/functional_ref_%s/*.png' % _branch()
56 files
= glob(join(Filename().get_user_appdata_directory(), path
))
57 self
.assertGreater(len(files
), 1)
59 def __similar_images(self
, ref_img
, tst_img
):
60 cmd
= 'magick compare -metric NCC %s %s diff.png' % (ref_img
, tst_img
)
62 if exists('diff.png'): remove('diff.png')
63 print('compare %s %s: %s' % (ref_img
, tst_img
, res
))
64 return float(res
) > .8
66 def __test_template(self
, cmd
, path
):
67 if environ
.get('FUNCTIONAL') != '1':
68 self
.skipTest('skipped functional tests')
71 system('amixer sset Master 0%')
73 self
.assertEqual(ret
, 0, 'error while executing ' + cmd
)
74 files
= glob(str(Path
.home()) + '/.local/share/pmachines/tests/functional_ref_%s/*.png' % _branch())
75 self
.assertGreater(len(files
), 1)
77 self
.assertTrue(exists(path
+ basename(fname
)), '%s does not exist' % (path
+ basename(fname
)))
78 similar
= self
.__similar
_images
(
79 str(Path
.home()) + '/.local/share/pmachines/tests/functional_ref_%s/' % _branch() + basename(fname
),
80 path
+ basename(fname
)),
81 'error while comparing %s and %s' % (
82 str(Path
.home()) + '/.local/share/pmachines/tests/functional_ref_%s/' % _branch() + basename(fname
),
83 path
+ basename(fname
))
85 timestamp
= datetime
.now().strftime('%y%m%d%H%M%S%f')
86 copy(path
+ basename(fname
), '~/Desktop/' + basename(fname
)[:-4] + timestamp
+ '.png')
87 self
.assertTrue(similar
)
92 'timeout 720s ~/venv/bin/python main.py --functional-test & '
93 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
94 'timeout 720s ~/venv/bin/python main.py --functional-test & '
95 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
96 str(Path
.home()) + '/.local/share/pmachines/tests/functional/')
98 def test_appimage(self
):
100 bld_branch
= {'master': 'alpha', 'rc': 'rc', 'stable': 'stable'}[_branch()]
101 bld_branch
= '' if bld_branch
== 'stable' else ('-' + bld_branch
)
102 self
.__test
_template
(
103 'timeout 720s ./dist/Pmachines%s-x86_64.AppImage --functional-test & '
104 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
105 'timeout 720s ./dist/Pmachines%s-x86_64.AppImage --functional-test & ' % (bld_branch
, bld_branch
) +
106 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
107 str(Path
.home()) + '/.local/share/pmachines/tests/functional/')
109 def test_flatpak(self
):
111 if environ
.get('FUNCTIONALPOST') != '1':
112 self
.skipTest('skipped functional-post tests')
113 bld_branch
= {'master': 'alpha', 'rc': 'rc', 'stable': 'stable'}[_branch()]
114 cmd
= 'flatpak update -y it.ya2.Pmachines//%s' % bld_branch
115 info('executing: %s' % cmd
)
117 info('executed: %s' % cmd
)
118 self
.__test
_template
(
119 'timeout 720s flatpak run it.ya2.Pmachines//%s --functional-test & '
120 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
121 'timeout 720s flatpak run it.ya2.Pmachines//%s --functional-test & ' % (bld_branch
, bld_branch
) +
122 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
123 str(Path
.home()) + '/.var/app/it.ya2.Pmachines/data/pmachines/tests/functional/')
125 # def __update_itchio(self):
126 # system('/home/flavio/.itch/itch')
128 # system('xdotool mousemove 860 620')
130 # system('xdotool click 1')
132 # system('killall itch')
134 # def test_itchio(self):
135 # info('test_itchio')
136 # if environ.get('FUNCTIONALPOST') != '1':
137 # self.skipTest('skipped functional-post tests')
138 # if _branch() != 'master':
140 # self.__update_itchio()
141 # self.__test_template(
142 # 'timeout 720s /home/flavio/.config/itch/apps/pmachines/pmachines --functional-test & '
143 # 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
144 # 'timeout 720s /home/flavio/.config/itch/apps/pmachines/pmachines --functional-test & '
145 # 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
146 # str(Path.home()) + '/.local/share/pmachines/tests/functional/')
148 #def test_windows(self):
149 # info('test_windows')
150 # system('pkill -f "pmachines.exe"')
151 # abspath = str(Path(__file__).parent.parent) + '/build/win_amd64/pmachines.exe'
152 # self.__test_template(
153 # 'timeout 720s wine %s --functional-test & '
154 # 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
155 # 'timeout 720s wine %s --functional-test & ' % (abspath, abspath) +
156 # 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
157 # str(Path.home()) + '/.wine/drive_c/users/flavio/AppData/Local/pmachines/tests/functional/')
159 def test_versions(self
):
160 info('test_versions')
161 if environ
.get('FUNCTIONAL') != '1':
162 self
.skipTest('skipped functional tests')
163 bld_branch
= {'master': 'alpha', 'rc': 'rc', 'stable': 'stable'}[_branch()]
164 with
open('/home/flavio/builders/pmachines_builder/last_bld.txt') as f
:
165 lines
= f
.readlines()
167 if line
.strip().split()[0] == _branch():
168 commit
= line
.strip().split()[1][:7]
170 if _branch() == 'stable':
171 with
open('/home/flavio/builders/pmachines_builder/pmachines/assets/version.txt') as fver
:
172 _ver
= fver
.read().strip() + '-'
173 exp
= '%s-%s' % (_ver
, commit
)
175 ('timeout 720s ./build/manylinux2010_x86_64/pmachines --version', str(Filename
.get_user_appdata_directory()) + '/pmachines/obs_version.txt'),
176 ('timeout 720s ./dist/Pmachines-%s-x86_64.AppImage --version' % bld_branch
, str(Filename
.get_user_appdata_directory()) + '/pmachines/obs_version.txt'),
177 #('timeout 720s wine ./build/win_amd64/pmachines.exe --version', '/home/flavio/.wine/drive_c/users/flavio/AppData/Local/pmachines/obs_version.txt')
179 #if environ.get('FUNCTIONALPOST') == '1':
180 # if _branch() == 'master':
181 # self.__update_itchio()
182 # cmds += [('timeout 720s /home/flavio/.config/itch/apps/pmachines/pmachines --version', str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt')]
183 # cmds += [('timeout 720s flatpak run it.ya2.Pmachines//%s --version' % bld_branch, '/home/flavio/.var/app/it.ya2.Pmachines/data/pmachines/obs_version.txt')]
184 system('flatpak update -y it.ya2.Pmachines//%s' % bld_branch
)
188 info('launching %s' % cmd
[0])
190 with
open(cmd
[1]) as f
:
191 obs
= f
.read().strip()
192 self
.assertEqual(obs
, exp
, 'during ' + cmd
[0])