mirror of
https://github.com/schrodinger/pymol-open-source.git
synced 2026-06-04 20:04:21 +08:00
183 lines
5.4 KiB
Python
183 lines
5.4 KiB
Python
from __future__ import print_function
|
|
|
|
import sys
|
|
import pytest
|
|
|
|
import pymol
|
|
import __main__
|
|
from pymol import cmd, testing, stored
|
|
|
|
|
|
class TestCommanding(testing.PyMOLTestCase):
|
|
|
|
def testAlias(self):
|
|
stored.v = None
|
|
cmd.alias('foo', '/stored.v = 123')
|
|
cmd.do('_ foo', echo=0)
|
|
self.assertEqual(stored.v, 123)
|
|
|
|
@testing.requires('gui', 'no_run_all')
|
|
def testCls(self):
|
|
cmd.set('internal_prompt', 0)
|
|
cmd.set('text', 1)
|
|
cmd.cls()
|
|
|
|
# check on black screen
|
|
img = self.get_imagearray()
|
|
self.assertFalse(img[...,:3].any())
|
|
|
|
def testDelete(self):
|
|
cmd.pseudoatom('m1')
|
|
cmd.pseudoatom('m2')
|
|
cmd.pseudoatom('m3')
|
|
cmd.delete('m1 m2')
|
|
self.assertEqual(cmd.get_names(), ['m3'])
|
|
|
|
def testDeleteStates(self):
|
|
cmd.pseudoatom('m1', state=10)
|
|
self.assertEqual(cmd.count_states('m1'), 10)
|
|
cmd.delete_states('m1', '4-8')
|
|
self.assertEqual(cmd.count_states('m1'), 5)
|
|
|
|
def testDo(self):
|
|
# tested with other methods
|
|
pass
|
|
|
|
def testExtend(self):
|
|
def check(v):
|
|
stored.v = None
|
|
cmd.do('foo', echo=0)
|
|
self.assertEqual(stored.v, v)
|
|
|
|
cmd.extend('foo', lambda: setattr(stored, 'v', 123))
|
|
check(123)
|
|
|
|
@cmd.extend
|
|
def foo():
|
|
stored.v = 456
|
|
check(456)
|
|
|
|
def testLog(self):
|
|
with testing.mktemp('.pml') as logfile:
|
|
cmd.log_open(logfile)
|
|
cmd.do('_ color blue')
|
|
cmd.log('hello world')
|
|
cmd.log_close()
|
|
lines = [_f for _f in map(str.strip, open(logfile)) if _f]
|
|
self.assertEqual(lines, ['color blue', 'hello world'])
|
|
|
|
@testing.requires_version('1.8.1.0')
|
|
def testLog2(self):
|
|
"""
|
|
Tests robustness of different logging methods:
|
|
1) Python implementation (cmd.log) vs. C implementation (PLog, via cmd.do)
|
|
2) pml vs. py syntax
|
|
3) handling of quoted input (''' broken in 1.8.2)
|
|
"""
|
|
self.ambientOnly()
|
|
cmd.viewport(100, 100)
|
|
cmd.fragment('gly')
|
|
cmd.orient()
|
|
cmd.show_as('spheres')
|
|
|
|
for ext in ['.pml', '.py']:
|
|
with testing.mktemp(ext) as logfile:
|
|
cmd.log_open(logfile)
|
|
cmd.do('_ color blue')
|
|
cmd.do('/cmd.color("yellow", "elem O")')
|
|
cmd.do('cmd.color("""green""",' " '''elem N''')")
|
|
cmd.log('bg red\n')
|
|
cmd.log('', 'cmd.color(\'magenta\', "hydro")\n')
|
|
cmd.log_close()
|
|
|
|
cmd.color('white')
|
|
cmd.bg_color('white')
|
|
|
|
if ext == '.pml':
|
|
cmd.do('@' + logfile)
|
|
else:
|
|
cmd.do('run ' + logfile)
|
|
|
|
img = self.get_imagearray()
|
|
self.assertImageHasColor('blue', img)
|
|
self.assertImageHasColor('yellow', img)
|
|
self.assertImageHasColor('green', img)
|
|
self.assertImageHasColor('red', img)
|
|
self.assertImageHasColor('magenta', img)
|
|
self.assertImageHasNotColor('white', img)
|
|
|
|
def testLogClose(self):
|
|
# see testLog
|
|
pass
|
|
|
|
def testLogOpen(self):
|
|
# see testLog
|
|
pass
|
|
|
|
def testQuit(self):
|
|
cmd.quit
|
|
self.skipTest("cannot test quit")
|
|
|
|
def testReinitialize(self):
|
|
def check(v, names):
|
|
self.assertEqual(v, cmd.get('pdb_conect_all'))
|
|
self.assertEqual(cmd.get_names(), names)
|
|
|
|
cmd.pseudoatom('m1')
|
|
v = cmd.set('pdb_conect_all')
|
|
cmd.reinitialize('store_defaults')
|
|
|
|
cmd.reinitialize('original_settings')
|
|
check('off', ['m1'])
|
|
|
|
cmd.reinitialize('settings')
|
|
check('on', ['m1'])
|
|
|
|
cmd.reinitialize('purge_defaults')
|
|
cmd.reinitialize('settings')
|
|
check('off', ['m1'])
|
|
|
|
cmd.reinitialize('everything')
|
|
check('off', [])
|
|
|
|
def testResume(self):
|
|
with testing.mktemp('.pml') as logfile:
|
|
with open(logfile, 'w') as f:
|
|
print('bg yellow', file=f)
|
|
cmd.resume(logfile)
|
|
self.assertEqual('yellow', cmd.get('bg_rgb'))
|
|
cmd.log('hello world')
|
|
cmd.log_close()
|
|
lines = [_f for _f in map(str.strip, open(logfile)) if _f]
|
|
self.assertEqual(lines, ['bg yellow', 'hello world'])
|
|
|
|
def testSplash(self):
|
|
cmd.feedback('disable', 'all', 'output')
|
|
cmd.splash()
|
|
|
|
def testSync(self):
|
|
cmd.sync()
|
|
|
|
@testing.foreach(
|
|
('local', 'pymol', False),
|
|
('global', 'pymol', True),
|
|
('module', '', False),
|
|
('main', '__main__', True),
|
|
('private', '__main__', False),
|
|
)
|
|
def testRun(self, namespace, mod, rw):
|
|
stored.tmp = False
|
|
with testing.mktemp('.py') as filename:
|
|
varname = '_tmp_' + namespace
|
|
with open(filename, 'w') as handle:
|
|
print('from pymol import stored', file=handle)
|
|
if mod:
|
|
print('stored.tmp = (__name__ == "%s")' % (mod), file=handle)
|
|
else:
|
|
print('stored.tmp = True', file=handle)
|
|
print(varname + ' = True', file=handle)
|
|
cmd.do('run %s, %s' % (filename, namespace), 0, 0)
|
|
self.assertTrue(stored.tmp)
|
|
if mod:
|
|
self.assertEqual(rw, hasattr(sys.modules[mod], varname))
|