@@ -76,6 +76,13 @@ class EndSpeech(_enum.Enum):
7676 NONE = None
7777
7878
79+ class ReportLineIndentation (_enum .Enum ):
80+ """Line indentation reporting options. Should match config.configFlags.ReportLineIndentation
81+ """
82+ OFF = 0
83+ SPEECH = 1
84+
85+
7986def _pressKeyAndCollectSpeech (key : str , numberOfTimes : int ) -> _typing .List [str ]:
8087 actual = []
8188 for _ in range (numberOfTimes ):
@@ -500,7 +507,7 @@ def test_symbolInSpeechUI():
500507 _notepad .prepareNotepad ((
501508 "t" # Character doesn't matter, we just want to invoke "Right" speech UI.
502509 ))
503- _setSymbolLevel (SymLevel .ALL )
510+ _setConfig (SymLevel .ALL )
504511 spy = _NvdaLib .getSpyLib ()
505512 expected = "shouldn't sub tick symbol"
506513 spy .override_translationString (EndSpeech .RIGHT .value , expected )
@@ -527,7 +534,7 @@ def test_symbolInSpeechUI():
527534 )
528535
529536 # Show that with symbol level None, the speech UI symbols are not substituted.
530- _setSymbolLevel (SymLevel .NONE )
537+ _setConfig (SymLevel .NONE )
531538 actual = _pressKeyAndCollectSpeech (Move .REVIEW_CHAR .value , numberOfTimes = 1 )
532539 _builtIn .should_be_equal (
533540 actual ,
@@ -536,20 +543,32 @@ def test_symbolInSpeechUI():
536543 )
537544
538545
539- def _setSymbolLevel (symbolLevel : SymLevel ) -> None :
546+ def _setConfig (
547+ symbolLevel : SymLevel ,
548+ reportLineIndentation : ReportLineIndentation = ReportLineIndentation .OFF ,
549+ ignoreBlankLines : bool = False
550+ ) -> None :
540551 spy = _NvdaLib .getSpyLib ()
541- SYMBOL_LEVEL_KEY = ["speech" , "symbolLevel" ]
542- spy .set_configValue (SYMBOL_LEVEL_KEY , symbolLevel .value )
543- _builtIn .log (message = f"Doing test at symbol level: { symbolLevel } " )
552+ spy .set_configValue (["documentFormatting" , "reportLineIndentation" ], reportLineIndentation .value )
553+ spy .set_configValue (["documentFormatting" , "ignoreBlankLinesForRLI" ], ignoreBlankLines )
554+ spy .set_configValue (["speech" , "symbolLevel" ], symbolLevel .value )
555+ message = (
556+ f"Doing test at symbol level: { symbolLevel } "
557+ f", line indentation reporting: { reportLineIndentation } "
558+ f", ignore blank lines for line indentation reporting: { ignoreBlankLines } "
559+ )
560+ _builtIn .log (message = message )
544561
545562
546563def _doTest (
547564 navKey : Move ,
548565 expectedSpeech : _typing .List [str ],
549566 reportedAfterLast : EndSpeech ,
550567 symbolLevel : SymLevel ,
568+ reportLineIndentation : ReportLineIndentation = ReportLineIndentation .OFF ,
569+ ignoreBlankLines : bool = False
551570) -> None :
552- _setSymbolLevel (symbolLevel )
571+ _setConfig (symbolLevel , reportLineIndentation , ignoreBlankLines )
553572
554573 actual = _pressKeyAndCollectSpeech (navKey .value , numberOfTimes = len (expectedSpeech ))
555574 _builtIn .should_be_equal (
@@ -600,7 +619,7 @@ def test_tableHeaders():
600619 </table>
601620 """
602621 )
603- _setSymbolLevel (SymLevel .ALL )
622+ _setConfig (SymLevel .ALL )
604623 # Expected to be in browse mode
605624 actualSpeech = _chrome .getSpeechAfterKey ("downArrow" )
606625 _asserts .strings_match (
@@ -669,3 +688,56 @@ def test_tableHeaders():
669688 "Don tick t column 3\n c" , # note symbols ARE replaced in column name
670689 ]
671690 )
691+
692+
693+ def test_ignoreBlankLinesForReportLineIndentation ():
694+ """ Test line indentation reporting with ignoreBlankLinesForReportLineIndentation off and then on
695+ """
696+ _notepad .prepareNotepad ('\n ' .join ([
697+ '' , # blank line
698+ 'def foo' ,
699+ '\t hello' ,
700+ '' , # blank line
701+ '\t world' ,
702+ '' , # blank line
703+ 'def bar' ,
704+ '' , # blank line
705+ ]))
706+
707+ def _doTestIgnoreBlankLines (ignoreBlankLines : bool , expectedSpeech : _typing .List [str ]) -> None :
708+ _doTest (
709+ navKey = Move .REVIEW_LINE ,
710+ reportedAfterLast = EndSpeech .BOTTOM ,
711+ symbolLevel = SymLevel .ALL ,
712+ reportLineIndentation = ReportLineIndentation .SPEECH ,
713+ ignoreBlankLines = ignoreBlankLines ,
714+ expectedSpeech = expectedSpeech
715+ )
716+
717+ _doTestIgnoreBlankLines (
718+ ignoreBlankLines = False ,
719+ expectedSpeech = [
720+ 'def foo' ,
721+ 'tab hello' ,
722+ 'no indent blank' ,
723+ 'tab world' ,
724+ 'no indent blank' ,
725+ 'def bar' ,
726+ 'blank'
727+ ]
728+ )
729+
730+ _NvdaLib .getSpeechAfterKey (Move .REVIEW_HOME .value ) # reset to start position
731+
732+ _doTestIgnoreBlankLines (
733+ ignoreBlankLines = True ,
734+ expectedSpeech = [
735+ 'def foo' ,
736+ 'tab hello' ,
737+ 'blank' ,
738+ 'world' ,
739+ 'blank' ,
740+ 'no indent def bar' ,
741+ 'blank'
742+ ]
743+ )
0 commit comments