1 """Covers interfaces used by the classic view."""
5 from cola
.models
.main
import MainModel
7 class MainModelObserver(object):
8 """Helper class for observing changes to the model."""
9 def __init__(self
, model
):
11 model
.add_message_observer(model
.message_paths_staged
,
13 model
.add_message_observer(model
.message_paths_unstaged
,
15 model
.add_message_observer(model
.message_paths_reverted
,
18 def observe_paths(self
, paths
=None):
19 """React to the 'paths_staged' message."""
23 class ClassicModelTestCase(helper
.TestCase
):
24 """Tests interfaces used by the classic view."""
26 def setup_baseline_repo(self
, commit
=True):
27 """Create a baseline repo for testing."""
29 git init >/dev/null &&
34 self
.shell("git commit -s -m'Initial commit' >/dev/null")
36 def test_everything(self
):
37 """Test the MainModel.everything() method."""
38 self
.setup_baseline_repo()
39 self
.shell('touch other-file')
41 model
= MainModel(cwd
=os
.getcwd())
44 everything
= model
.everything()
45 self
.assertTrue('the-file' in everything
)
46 self
.assertTrue('other-file' in everything
)
48 def test_stage_paths(self
):
49 """Test a simple usage of stage_paths()."""
50 self
.setup_baseline_repo()
51 self
.shell('echo change > the-file')
53 model
= MainModel(cwd
=os
.getcwd())
54 observer
= MainModelObserver(model
)
55 model
.stage_paths(['the-file'])
57 self
.assertTrue('the-file' in observer
.paths
)
59 def test_stage_paths_subdir(self
):
60 """Test stage_paths() in a subdirectory."""
61 self
.setup_baseline_repo()
65 git add foo/bar/baz &&
66 echo change > foo/bar/baz
69 model
= MainModel(cwd
=os
.getcwd())
70 observer
= MainModelObserver(model
)
72 model
.stage_paths(['foo'])
74 self
.assertTrue('foo' in observer
.paths
)
75 self
.assertTrue('foo/bar' in observer
.paths
)
76 self
.assertTrue('foo/bar/baz' in observer
.paths
)
78 self
.shell('echo change >> foo/bar/baz')
80 model
.stage_paths(['foo/bar/baz'])
82 self
.assertTrue('foo/bar/baz' in observer
.paths
)
83 self
.assertTrue('foo/bar' in observer
.paths
)
84 self
.assertTrue('foo' in observer
.paths
)
86 def test_stage_paths_untracked(self
):
87 """Test stage_paths() with an untracked file."""
88 self
.setup_baseline_repo()
94 model
= MainModel(cwd
=os
.getcwd())
95 observer
= MainModelObserver(model
)
97 model
.stage_paths(['foo'])
99 self
.assertTrue('foo' in observer
.paths
)
100 self
.assertTrue('foo/bar' in observer
.paths
)
101 self
.assertTrue('foo/bar/baz' in observer
.paths
)
102 self
.assertTrue('foo/bar/baz' in model
.staged
)
103 self
.assertTrue('foo/bar/baz' not in model
.modified
)
104 self
.assertTrue('foo/bar/baz' not in model
.untracked
)
106 def test_unstage_paths(self
):
107 """Test a simple usage of unstage_paths()."""
108 self
.setup_baseline_repo()
110 echo change > the-file &&
114 model
= MainModel(cwd
=os
.getcwd())
115 observer
= MainModelObserver(model
)
116 model
.unstage_paths(['the-file'])
118 self
.assertTrue('the-file' in observer
.paths
)
119 self
.assertTrue('the-file' not in model
.staged
)
120 self
.assertTrue('the-file' in model
.modified
)
122 def test_unstage_paths_init(self
):
123 """Test unstage_paths() on the root commit."""
124 self
.setup_baseline_repo(commit
=False)
126 model
= MainModel(cwd
=os
.getcwd())
127 observer
= MainModelObserver(model
)
129 model
.unstage_paths(['the-file'])
131 self
.assertTrue('the-file' in observer
.paths
)
132 self
.assertTrue('the-file' not in model
.staged
)
133 self
.assertTrue('the-file' in model
.untracked
)
135 def test_unstage_paths_subdir(self
):
136 """Test unstage_paths() in a subdirectory."""
137 self
.setup_baseline_repo()
144 model
= MainModel(os
.getcwd())
145 observer
= MainModelObserver(model
)
147 model
.unstage_paths(['foo'])
149 self
.assertTrue('foo' in observer
.paths
)
150 self
.assertTrue('foo/bar' in observer
.paths
)
151 self
.assertTrue('foo/bar/baz' in observer
.paths
)
152 self
.assertTrue('foo/bar/baz' in model
.untracked
)
153 self
.assertTrue('foo/bar/baz' not in model
.staged
)
155 def test_revert_paths(self
):
156 """Test a simple use of 'revert_paths'."""
157 self
.setup_baseline_repo()
158 self
.shell('echo change > the-file')
160 model
= MainModel(cwd
=os
.getcwd())
161 observer
= MainModelObserver(model
)
162 model
.revert_paths(['the-file'])
164 self
.assertTrue('the-file' in observer
.paths
)
165 self
.assertTrue('the-file' not in model
.staged
)
166 self
.assertTrue('the-file' not in model
.modified
)
168 def test_revert_paths_subdir(self
):
169 self
.setup_baseline_repo()
173 git add foo/bar/baz &&
174 git commit -m'Changed foo/bar/baz' >/dev/null &&
175 echo change > foo/bar/baz
178 model
= MainModel(cwd
=os
.getcwd())
179 observer
= MainModelObserver(model
)
180 model
.revert_paths(['foo'])
182 self
.assertTrue('foo' in observer
.paths
)
183 self
.assertTrue('foo/bar' in observer
.paths
)
184 self
.assertTrue('foo/bar/baz' in observer
.paths
)
185 self
.assertTrue('foo/bar/baz' not in model
.modified
)
186 self
.assertTrue('foo/bar/baz' not in model
.staged
)