Files
pymol-open-source/testing/tests/undo/api/test_undo_selecting.py
2023-04-15 15:47:44 -04:00

155 lines
4.6 KiB
Python

'''
Testing: pymol.importing
'''
import pytest
from pymol import cmd
from pymol.constants import ALL_STATES
def _undo_sele(sele_name,
current_sele_atom_count,
current_sele_list,
original_sele_atom_count,
original_sele_list):
assert current_sele_atom_count == cmd.count_atoms(sele_name)
assert current_sele_list == cmd.get_names("selections")
cmd.undo()
assert original_sele_list == cmd.get_names("selections")
cmd.redo()
assert current_sele_atom_count == cmd.count_atoms(sele_name)
assert current_sele_list == cmd.get_names("selections")
def test_undo_select():
cmd.fragment("gly", "m1")
NC = 2
# auto_number_selections=0
cmd.select("elem C")
_undo_sele("sele", NC, ["sele"], 0, [])
assert 0 == cmd.get_setting_int("sel_counter")
cmd.delete("sele")
def test_undo_auto_number_select():
cmd.fragment("gly", "m1")
NC = 2
# auto_number_selections=1
cmd.set('auto_number_selections', 1)
cmd.set('sel_counter', 3)
cmd.select("elem C")
_undo_sele("sel04", NC, ["sel04"], 0, [])
assert 4 == cmd.get_setting_int("sel_counter")
cmd.set('auto_number_selections', 1) # ??
cmd.select(None, "elem C")
_undo_sele("sel05", NC, ["sel04", "sel05"], 0, ["sel04"])
assert 5 == cmd.get_setting_int("sel_counter")
cmd.delete("sel*")
# name=None always numbers the selection
cmd.set('auto_number_selections', 0)
cmd.select(None, "elem C")
_undo_sele("sel06", NC, ["sel06"], 0, [])
assert 6 == cmd.get_setting_int("sel_counter")
cmd.delete("sel*")
def _undo_assert_selections(
target_sele,
prev_atom_count,
prev_all_names,
prev_enabled_names,
curr_atom_count,
curr_all_names,
curr_enabled_names,
state=ALL_STATES
):
assert curr_atom_count == cmd.count_atoms(target_sele, state=state)
assert curr_all_names == cmd.get_names("selections", enabled_only=0)
assert curr_enabled_names == cmd.get_names("selections", enabled_only=1)
cmd.undo()
assert prev_atom_count == cmd.count_atoms(target_sele, state=state)
assert prev_all_names == cmd.get_names("selections", enabled_only=0)
assert prev_enabled_names == cmd.get_names("selections", enabled_only=1)
cmd.redo()
assert curr_atom_count == cmd.count_atoms(target_sele, state=state)
assert curr_all_names == cmd.get_names("selections", enabled_only=0)
assert curr_enabled_names == cmd.get_names("selections", enabled_only=1)
def test_undo_select_merge():
cmd.fragment("gly", "m1")
NC = 2
# merge with non-existing, enable=0
cmd.select("foo", "elem C", 0, merge=1)
_undo_assert_selections("?foo", 0, [], [], NC, ["foo"], [])
# merge, enable=1
cmd.select("foo", "elem N", 1)
_undo_assert_selections("?foo", NC, ["foo"], [], 1, ["foo"], ["foo"])
cmd.select("foo", "elem C", -1, merge=1)
_undo_assert_selections(
"?foo", NC - 1, ["foo"], ["foo"], NC + 1, ["foo"], ["foo"])
cmd.select("foo", "elem O", -1, merge=2)
assert NC + 2 == cmd.count_atoms("foo")
assert ["foo"] == cmd.get_names("selections", enabled_only=0)
assert ["foo"] == cmd.get_names("selections", enabled_only=1)
# merge, enable=0
cmd.select("foo", "elem N", 1)
cmd.select("foo", "elem N", 0)
_undo_assert_selections("?foo", 1, ["foo"], ["foo"], 1, ["foo"], [])
cmd.select("foo", "elem C", -1, merge=1)
_undo_assert_selections("?foo", NC - 1, ["foo"], [], NC + 1, ["foo"], [])
cmd.select("foo", "elem O", -1, merge=2)
_undo_assert_selections("?foo", NC + 1, ["foo"], [], NC - 1, ["foo"], [])
# state
cmd.delete("sele")
cmd.create('m1', 'm1 & elem C', 1, 2)
cmd.select('present')
_undo_assert_selections("present", 7, ["foo"], [], 7, [
"foo", "sele"], ["sele"])
cmd.delete("sele")
cmd.select('present', state=1)
_undo_assert_selections("present", 7, ["foo"], [], 7, [
"foo", "sele"], ["sele"])
cmd.delete("sele")
cmd.select('present', state=2)
_undo_assert_selections("present", 2, ["foo"], [], 2, [
"foo", "sele"], ["sele"], state=2)
cmd.delete("sele")
cmd.select('present', state=3)
_undo_assert_selections("present", 0, ["foo"], [], 0, [
"foo", "sele"], ["sele"], state=3)
# domain
cmd.delete("sele")
cmd.delete("foo")
cmd.select("foo", "elem C")
# foo is disabled; must test enabled state
cmd.select("bar", "name CA+N+O", domain="foo")
_undo_assert_selections("?bar", 0, ["foo"], ["foo"], 1, [
"foo", "bar"], ["bar"])