def test_reconcile(self): ''' reconcile should get a coherent workspace status ''' # files opened for edit and deleted on disk should be reverted then # deleted in perforce in order to have a good state with mock_p4() as mock: mock.add_changelist('test_changelist', ('/p4/file_1', 'rev 1'), ('/p4/file_2', 'rev 1'), ('/p4/file_3', 'rev 1'), ('/p4/dir/file_1', 'rev 1')) self._p4.sync() cl_number = self._p4.get_or_create_changelist('Test changelist') self.assertTrue(self._p4.edit(cl_number, '/p4/file_2')) os.remove('/p4/file_1') os.remove('/p4/file_2') with open('/p4/file_3', 'w') as file_content: file_content.write('rev 2') nimp.tests.utils.create_file('/p4/dir/file_2', 'rev 1') self.assertTrue( self._p4.reconcile(cl_number, '/p4/dir', '/p4/file_1', '/p4/file_2', '/p4/file_3')) status = self._p4.get_files_status('/p4/dir', '/p4/file_1', '/p4/file_2', '/p4/file_3') self.assertListEqual(list(status), [('/p4/dir/file_1', 'add', None), ('/p4/dir/file_2', None, 'add'), ('/p4/file_1', 'add', 'delete'), ('/p4/file_2', 'add', 'delete'), ('/p4/file_3', 'add', 'edit')])
def test_get_modified_files(self): ''' test submit ''' with mock_p4() as mock: cl_1 = mock.add_changelist('test_changelist', ('/p4/file_1', 'rev 1'), ('/p4/file_2', 'rev 1'), ('/p4/file_3', 'rev 1')) cl_2 = mock.add_changelist('test_changelist', ('/p4/file_2', 'rev 2'), ('/p4/file_3', None)) cl_3 = mock.add_changelist('test_changelist', ('/p4/file_3', 'recreated')) cl_1_modified_files = list(self._p4.get_modified_files(cl_1)) cl_2_modified_files = list(self._p4.get_modified_files(cl_2)) cl_3_modified_files = list(self._p4.get_modified_files(cl_3)) self.assertListEqual([('/test_client/file_1', 'add'), ('/test_client/file_2', 'add'), ('/test_client/file_3', 'add')], sorted(cl_1_modified_files)) self.assertListEqual([('/test_client/file_2', 'add'), ('/test_client/file_3', 'add')], sorted(cl_2_modified_files)) self.assertListEqual([('/test_client/file_3', 'add')], sorted(cl_3_modified_files))
def test_revert_changelist(self): ''' should rever only files in specified changelist ''' with mock_p4() as mock: mock.add_changelist('test_changelist', ('/p4/file_1', 'rev 1'), ('/p4/file_2', 'rev 1')) self._p4.sync() cl_1 = self._p4.get_or_create_changelist('test cl_1') cl_2 = self._p4.get_or_create_changelist('test cl_2') self._p4.edit(cl_1, '/p4/file_1') self._p4.edit(cl_2, '/p4/file_2') with open('/p4/file_1', 'w') as file_content: file_content.write('rev 2') with open('/p4/file_2', 'w') as file_content: file_content.write('rev 2') self.assertTrue(self._p4.revert_changelist(cl_1)) with open('/p4/file_1', 'r') as file_content: self.assertEqual(file_content.read(), 'rev 1') with open('/p4/file_2', 'r') as file_content: self.assertEqual(file_content.read(), 'rev 2')
def test_get_files_status(self): ''' get_file_status should return correct file status ''' # /... should be added to the end of a file if it's a directory with mock_p4() as mock: mock.add_changelist('test changelist', ('/p4/file_1', 'rev_1'), ('/p4/file_2', 'rev_1'), ('/p4/file_3', 'rev_1'), ('/p4/dir/child_1', 'rev_1')) mock.add_changelist('test changelist 2', ('/p4/file_2', None), ('/p4/file_3', None), ('/p4/dir/child_1', 'rev_2')) self._p4.sync() nimp.tests.utils.create_file('/p4/dir/child_2', 'rev_1') nimp.tests.utils.create_file('/p4/dir/child_3', 'rev_1') nimp.tests.utils.create_file('/some_path/not_in_client', 'rev_1') cl_number = self._p4.get_or_create_changelist('test changelist') self._p4.edit(cl_number, '/p4/file_1') self._p4.add(cl_number, '/p4/file_2') self._p4.add(cl_number, '/p4/dir/child_2') result = self._p4.get_files_status('/p4/dir', '/p4/file_1', '/p4/file_2', '/p4/file_3', '/some_path/not_in_client', '/p4/unknown_file') expected = [('/p4/dir/child_1', 'add', None), ('/p4/dir/child_2', None, 'add'), ('/p4/file_1', 'add', 'edit'), ('/p4/file_2', 'delete', 'add'), ('/p4/file_3', 'delete', None)] self.assertListEqual(list(result), expected)
def test_get_last_synced_changelist(self): ''' describe should return changelist description''' with mock_p4() as mock: mock.add_changelist('test_changelist', ('/p4/file_1', 'rev 1')) cl_number = mock.add_changelist('test_changelist', ('/p4/file_1', 'rev 2')) self._p4.sync() self.assertEqual(self._p4.get_last_synced_changelist(), cl_number)
def test_delete(self): ''' deletes should delete files ''' with mock_p4() as mock: mock.add_changelist('test changelist', ('/p4/file_1', 'rev 1'), ('/p4/file_2', 'rev 1')) self._p4.sync() cl_number = self._p4.get_or_create_changelist('test_cl') self.assertIsNotNone(cl_number) self.assertTrue(self._p4.delete(cl_number, '/p4/file_1')) self._assert_action_is('/p4/file_1', 'delete') self.assertFalse(os.path.exists('/p4/file_1')) self.assertTrue(self._p4.submit(cl_number)) self.assertFalse(self._p4.delete(cl_number, '/p4/file_2')) self.assertFalse(self._p4.delete('9999999', '/p4/file_2'))
def test_sync(self): ''' describe should return changelist description''' with mock_p4() as mock: rev_1 = mock.add_changelist('test_changelist', ('/p4/file_1', 'rev 1'), ('/p4/file_2', 'rev 1'), ('/p4/file_3', 'rev 1')) rev_2 = mock.add_changelist('test_changelist', ('/p4/file_1', 'rev 2'), ('/p4/file_2', 'rev 2'), ('/p4/file_3', 'rev 2')) mock.add_changelist('test_changelist', ('/p4/file_2', None), ('/p4/file_3', 'rev 3')) self._p4.sync(rev_1) self._p4.sync() self.assertTrue(os.path.exists('/p4/file_1')) self.assertFalse(os.path.exists('/p4/file_2')) self.assertTrue(os.path.exists('/p4/file_3')) with open('/p4/file_1', 'r') as file_content: self.assertEqual(file_content.read(), 'rev 2') with open('/p4/file_3', 'r') as file_content: self.assertEqual(file_content.read(), 'rev 3') self._p4.sync('/p4/file_3', rev_2) with open('/p4/file_1', 'r') as file_content: self.assertEqual(file_content.read(), 'rev 2') with open('/p4/file_3', 'r') as file_content: self.assertEqual(file_content.read(), 'rev 2') self._p4.sync(cl_number=rev_1) self.assertTrue(os.path.exists('/p4/file_1')) self.assertTrue(os.path.exists('/p4/file_2')) self.assertTrue(os.path.exists('/p4/file_3')) with open('/p4/file_1', 'r') as file_content: self.assertEqual(file_content.read(), 'rev 1') with open('/p4/file_2', 'r') as file_content: self.assertEqual(file_content.read(), 'rev 1') with open('/p4/file_3', 'r') as file_content: self.assertEqual(file_content.read(), 'rev 1')
def test_revert_unchanged(self): ''' should rever only files in specified changelist that have not changed ''' with mock_p4() as mock: mock.add_changelist('test_changelist', ('/p4/file_1', 'rev 1'), ('/p4/file_2', 'rev 1')) self._p4.sync() changelist = self._p4.get_or_create_changelist('test changelist') self._p4.edit(changelist, '/p4/file_1') self._p4.edit(changelist, '/p4/file_2') with open('/p4/file_1', 'w') as file_content: file_content.write('rev 2') self.assertTrue(self._p4.revert_unchanged(changelist)) self._assert_action_is('/p4/file_1', None) self._assert_action_is('/p4/file_2', None)
def test_edit(self): ''' edit should open correct files for edit''' with mock_p4() as mock: mock.add_changelist('test_changelist', ('/p4/file_1', 'rev_1'), ('/p4/file_2', 'rev_1')) mock.add_changelist('test_changelist', ('/p4/file_1', 'rev_1'), ('/p4/file_2', None)) self._p4.sync() cl_number = self._p4.get_or_create_changelist('test changelist') self.assertTrue( self._p4.edit(cl_number, '/p4/file_1', '/p4/file_2')) self._assert_action_is('/p4/file_1', 'edit') self._assert_action_is('/p4/file_2', None) self.assertTrue(self._p4.submit(cl_number)) self.assertFalse(self._p4.edit(cl_number, '/p4/file_1')) self.assertFalse(self._p4.edit(cl_number, '/p4/file_1')) self.assertFalse(self._p4.edit(cl_number, '/p4/file_2'))
def test_clean_workspace(self): ''' clean_workspace should revert all files and delete pending changelist ''' with mock_p4() as mock: mock.add_changelist('test changelist', ('/p4/file_1', 'rev_1'), ('/p4/file_2', 'rev_2'), ('/p4/file_3', 'rev_1')) self._p4.sync() cl_number = self._p4.get_or_create_changelist('test changelist') self._p4.edit(cl_number, '/p4/file_1') cl_number = self._p4.get_or_create_changelist('test changelist 2') self._p4.edit(cl_number, '/p4/file_2') self.assertTrue(self._p4.clean_workspace()) pending_cls = self._p4.get_pending_changelists() self.assertTrue(len(list(pending_cls)) == 0) self._assert_action_is('/p4/file_1', None) self._assert_action_is('/p4/file_2', None) self._assert_action_is('/p4/file_3', None)
def test_is_file_versionned(self): ''' describe should return changelist description''' with mock_p4() as mock: mock.add_changelist('test_changelist', ('/p4/file_1', 'rev 1'), ('/p4/file_2', 'rev 1'), ('/p4/file_3', 'rev 1')) mock.add_changelist('test_changelist', ('/p4/file_2', None), ('/p4/file_3', None)) mock.add_changelist('test_changelist', ('/p4/file_3', 'recreated')) self._p4.sync() nimp.tests.utils.create_file('/p4/file_4', 'rev 1') self.assertTrue(self._p4.is_file_versioned('/p4/file_1')) self.assertFalse(self._p4.is_file_versioned('/p4/file_2')) self.assertTrue(self._p4.is_file_versioned('/p4/file_3')) self.assertFalse(self._p4.is_file_versioned('/p4/file_4'))