@@ -803,6 +803,173 @@ def testFilter(self):
803803 print (err .getvalue ().strip ())
804804 self .assertEqual (out , "issue1:issue2" )
805805
806+ def testPragma (self ):
807+ """Uses interactive mode since pragmas only apply when using multiple
808+ commands.
809+ """
810+ if self .backend not in ['anydbm' ]:
811+ self .skipTest ("For speed only run test with anydbm." )
812+
813+ orig_input = AdminTool .my_input
814+
815+ for i in ["oN" , "1" , "yeS" , "True" ]:
816+ inputs = iter (["pragma verbose=%s" % i , "pragma list" , "quit" ])
817+ AdminTool .my_input = lambda _self , _prompt : next (inputs )
818+
819+ self .install_init ()
820+ self .admin = AdminTool ()
821+ sys .argv = ['main' , '-i' , self .dirname ]
822+
823+ with captured_output () as (out , err ):
824+ ret = self .admin .main ()
825+
826+ out = out .getvalue ().strip ().split ('\n ' )
827+
828+ print (ret )
829+ self .assertTrue (ret == 0 )
830+ expected = ' verbose=True'
831+ self .assertIn (expected , out )
832+ self .assertIn ('descriptions...' , out [- 1 ])
833+
834+ # -----
835+ for i in ["oFf" , "0" , "NO" , "FalSe" ]:
836+ inputs = iter (["pragma verbose=true" , "pragma verbose=%s" % i ,
837+ "pragma list" , "quit" ])
838+ AdminTool .my_input = lambda _self , _prompt : next (inputs )
839+
840+ self .install_init ()
841+ self .admin = AdminTool ()
842+ sys .argv = ['main' , '-i' , self .dirname ]
843+
844+ with captured_output () as (out , err ):
845+ ret = self .admin .main ()
846+
847+ out = out .getvalue ().strip ().split ('\n ' )
848+
849+ print (ret )
850+ self .assertTrue (ret == 0 )
851+ expected = ' verbose=False'
852+ self .assertIn (expected , out )
853+
854+ # ----- test syntax errors
855+ inputs = iter (["pragma" , "pragma arg" ,
856+ "pragma foo=3" ,"quit" ])
857+ AdminTool .my_input = lambda _self , _prompt : next (inputs )
858+
859+ self .install_init ()
860+ self .admin = AdminTool ()
861+ sys .argv = ['main' , '-i' , self .dirname ]
862+
863+ with captured_output () as (out , err ):
864+ ret = self .admin .main ()
865+
866+ out = out .getvalue ().strip ().split ('\n ' )
867+
868+ print (ret )
869+ self .assertTrue (ret == 0 )
870+ expected = 'Error: Not enough arguments supplied'
871+ self .assertIn (expected , out )
872+ expected = 'Error: Argument must be setting=value, was given: arg.'
873+ self .assertIn (expected , out )
874+ expected = 'Error: Unknown setting foo.'
875+ self .assertIn (expected , out )
876+
877+ # -----
878+ inputs = iter (["pragma verbose=foo" , "quit" ])
879+ AdminTool .my_input = lambda _self , _prompt : next (inputs )
880+
881+ self .install_init ()
882+ self .admin = AdminTool ()
883+ sys .argv = ['main' , '-i' , self .dirname ]
884+
885+ with captured_output () as (out , err ):
886+ ret = self .admin .main ()
887+
888+ out = out .getvalue ().strip ().split ('\n ' )
889+
890+ print (ret )
891+ self .assertTrue (ret == 0 )
892+ expected = 'Error: Incorrect value for boolean setting verbose: foo.'
893+ self .assertIn (expected , out )
894+
895+ # -----
896+ inputs = iter (["pragma verbose=on" , "pragma _inttest=5" ,
897+ "pragma list" , "quit" ])
898+ AdminTool .my_input = lambda _self , _prompt : next (inputs )
899+
900+ self .install_init ()
901+ self .admin = AdminTool ()
902+ sys .argv = ['main' , '-i' , self .dirname ]
903+
904+ with captured_output () as (out , err ):
905+ ret = self .admin .main ()
906+
907+ out = out .getvalue ().strip ().split ('\n ' )
908+
909+ print (ret )
910+ self .assertTrue (ret == 0 )
911+ expected = ' _inttest=5'
912+ self .assertIn (expected , out )
913+ self .assertIn ('descriptions...' , out [- 1 ])
914+
915+
916+ # -----
917+ inputs = iter (["pragma verbose=on" , "pragma _inttest=fred" ,
918+ "pragma list" , "quit" ])
919+ AdminTool .my_input = lambda _self , _prompt : next (inputs )
920+
921+ self .install_init ()
922+ self .admin = AdminTool ()
923+ sys .argv = ['main' , '-i' , self .dirname ]
924+
925+ with captured_output () as (out , err ):
926+ ret = self .admin .main ()
927+
928+ out = out .getvalue ().strip ().split ('\n ' )
929+
930+ print (ret )
931+ self .assertTrue (ret == 0 )
932+ expected = 'Error: Incorrect value for integer setting _inttest: fred.'
933+ self .assertIn (expected , out )
934+ self .assertIn ('descriptions...' , out [- 1 ])
935+
936+ # -----
937+ inputs = iter (["pragma indexer_backend=whoosh" , "pragma list" ,
938+ "quit" ])
939+ AdminTool .my_input = lambda _self , _prompt : next (inputs )
940+
941+ self .install_init ()
942+ self .admin = AdminTool ()
943+ sys .argv = ['main' , '-i' , self .dirname ]
944+
945+ with captured_output () as (out , err ):
946+ ret = self .admin .main ()
947+
948+ out = out .getvalue ().strip ().split ('\n ' )
949+
950+ print (ret )
951+ expected = ' indexer_backend=whoosh'
952+ self .assertIn (expected , out )
953+
954+ # -----
955+ inputs = iter (["pragma _floattest=4.5" , "quit" ])
956+ AdminTool .my_input = lambda _self , _prompt : next (inputs )
957+
958+ self .install_init ()
959+ self .admin = AdminTool ()
960+ sys .argv = ['main' , '-i' , self .dirname ]
961+
962+ with captured_output () as (out , err ):
963+ ret = self .admin .main ()
964+
965+ out = out .getvalue ().strip ().split ('\n ' )
966+
967+ print (ret )
968+ expected = 'Error: Internal error: pragma can not handle values of type: float'
969+ self .assertIn (expected , out )
970+
971+ # -----
972+ AdminTool .my_input = orig_input
806973
807974 def disabletestHelpInitopts (self ):
808975
0 commit comments