Files
loongoffice/sw/qa/python/check_xmodifiable2.py
Michael Stahl aca32a5545 tdf#146547 sfx2: allow read-only documents to be modified
This is particularly useful for a Writer document that contains a
section that is set to be editable in a read-only document, so that the
user is warned when closing such a document without saving it.

Originally this check was added in commit
27db57efc51487b3976fbf73df1868b8fb78d201 "CWS fwkbugfix05"
"#i39869#: readonly docs should never become modified"
but the actual problem there was that the read-only document was
displayed in a wizard dialog, not in a document view, so let's instead
check that the document is some kind of "internal" document.

Also the dialog's Save button should do something, and since the
document is read-only, a Save As dialog appears appropriate.

Change-Id: I339cbe92a2c9eb74a1f5061246f921037a47f79c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153180
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
2023-06-16 16:52:43 +02:00

195 lines
6.1 KiB
Python

#! /usr/bin/env python
# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
import unittest
from org.libreoffice.unotest import UnoInProcess
class XModifiable2(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls._uno = UnoInProcess()
cls._uno.setUp()
@classmethod
def tearDownClass(cls):
cls._uno.tearDown()
def test_XModifiable2(self):
# initialization
xDoc = self._uno.openEmptyWriterDoc()
# perform unit test
self.assertTrue(xDoc.isSetModifiedEnabled())
self.assertTrue(xDoc.disableSetModified())
self.assertFalse(xDoc.isSetModifiedEnabled())
self.assertFalse(xDoc.enableSetModified())
self.assertTrue(xDoc.isSetModifiedEnabled())
# clean up
xDoc.close(True)
def test_XModifiable2_Double(self):
# initialization
xDoc = self._uno.openEmptyWriterDoc()
# perform unit test
self.assertTrue(xDoc.isSetModifiedEnabled())
# try to disable
# Expected return value:
# `TRUE` the changing of the modified state was disabled
self.assertTrue(xDoc.disableSetModified())
self.assertFalse(xDoc.isSetModifiedEnabled())
# try to disable twice
# Expected return value:
# `FALSE` the changing of the modified state was already disabled
self.assertFalse(xDoc.disableSetModified())
self.assertFalse(xDoc.isSetModifiedEnabled())
# try to disable third time
# Expected return value:
# `FALSE` the changing of the modified state was already disabled
# i.e. the same as in previous call
self.assertFalse(xDoc.disableSetModified())
self.assertFalse(xDoc.isSetModifiedEnabled())
# try to enable
# Expected return value:
# `FALSE` the changing of the modified state was enabled
self.assertFalse(xDoc.enableSetModified())
self.assertTrue(xDoc.isSetModifiedEnabled())
# try to enable twice
# Expected return value:
# `TRUE` the changing of the modified state was already enabled
self.assertTrue(xDoc.enableSetModified())
self.assertTrue(xDoc.isSetModifiedEnabled())
# try to enable third time
# Expected return value:
# `TRUE` the changing of the modified state was already enabled
# i.e. the same as in previous call
self.assertTrue(xDoc.enableSetModified())
self.assertTrue(xDoc.isSetModifiedEnabled())
# clean up
xDoc.close(True)
def test_XModifiable2_setModified(self):
# initialization
xDoc = self._uno.openEmptyWriterDoc()
# perform unit test
# try to set modified flag when modification enabled
self.assertTrue(xDoc.isSetModifiedEnabled())
self.assertFalse(xDoc.isModified())
xDoc.setModified(True)
self.assertTrue(xDoc.isModified())
xDoc.setModified(False)
self.assertFalse(xDoc.isModified())
# try to set modified flag when modification disabled
self.assertTrue(xDoc.disableSetModified())
self.assertFalse(xDoc.isSetModifiedEnabled())
self.assertFalse(xDoc.isModified())
xDoc.setModified(True)
self.assertFalse(xDoc.isModified())
self.assertFalse(xDoc.enableSetModified())
self.assertTrue(xDoc.isSetModifiedEnabled())
# document is still not modified
self.assertFalse(xDoc.isModified())
# try to set modified flag when modification enabled
# and when we have changed the modification possibility
self.assertTrue(xDoc.isSetModifiedEnabled())
self.assertFalse(xDoc.isModified())
xDoc.setModified(True)
self.assertTrue(xDoc.isModified())
xDoc.setModified(False)
self.assertFalse(xDoc.isModified())
# clean up
xDoc.close(True)
def test_setModified_ByContent(self):
# initialization
xDoc = self._uno.openEmptyWriterDoc()
# perform unit test:
# set modified flag using text editing
# when modification of the flag is enabled
self.assertTrue(xDoc.isSetModifiedEnabled())
self.assertFalse(xDoc.isModified())
cursor = xDoc.Text.createTextCursor()
xDoc.Text.insertString(cursor, "The first paragraph", 0)
self.assertTrue(xDoc.isSetModifiedEnabled())
self.assertTrue(xDoc.isModified())
# clean up
xDoc.close(True)
def test_setModified_ByContent_Blocked(self):
# initialization
xDoc = self._uno.openEmptyWriterDoc()
# perform unit test:
# it is unable to set modified flag using text editing
# when modification of the flag was disabled
self.assertTrue(xDoc.disableSetModified())
self.assertFalse(xDoc.isSetModifiedEnabled())
self.assertFalse(xDoc.isModified())
cursor = xDoc.Text.createTextCursor()
xDoc.Text.insertString(cursor, "The first paragraph", 0)
self.assertFalse(xDoc.isSetModifiedEnabled())
self.assertFalse(xDoc.isModified())
# clean up
xDoc.close(True)
def test_WriteProtectedDocument(self):
# initialization
xDoc = self._uno.openTemplateFromTDOC('WriteProtected.odt')
# perform unit test:
# it is able to set modified flag using text editing despite
# ODT file was marked to be opened as read-only
self.assertTrue(xDoc.isSetModifiedEnabled())
self.assertFalse(xDoc.isModified())
cursor = xDoc.Text.createTextCursor()
xDoc.Text.insertString(cursor, "The first paragraph", 0)
self.assertTrue(xDoc.isSetModifiedEnabled())
self.assertTrue(xDoc.isModified())
# clean up
xDoc.close(True)
if __name__ == '__main__':
unittest.main()
# vim: set shiftwidth=4 softtabstop=4 expandtab: