comparison src/testdir/test87.in @ 4637:4c46e1487c63 v7.3.1066

updated for version 7.3.1066 Problem: Python: Insufficient exception and error testing. Solution: Python patch 25. (ZyX)
author Bram Moolenaar <bram@vim.org>
date Thu, 30 May 2013 13:28:41 +0200
parents 4157fef7b950
children c316a30a8892
comparison
equal deleted inserted replaced
4636:de7b8aca1be2 4637:4c46e1487c63
744 :$put =string(sort(keys(py3eval('dd')))) 744 :$put =string(sort(keys(py3eval('dd'))))
745 :$put =string(py3eval('dl')) 745 :$put =string(py3eval('dl'))
746 :$put =string(py3eval('dl2')) 746 :$put =string(py3eval('dl2'))
747 :$put =string(py3eval('df(2)')) 747 :$put =string(py3eval('df(2)'))
748 :" 748 :"
749 :" Test errors
750 :fun F() dict
751 :endfun
752 :fun D()
753 :endfun
754 py3 << EOF
755 def ee(expr, g=globals(), l=locals()):
756 try:
757 try:
758 exec(expr, g, l)
759 except Exception as e:
760 cb.append(expr + ':' + repr((e.__class__, e)))
761 else:
762 cb.append(expr + ':NOT FAILED')
763 except Exception as e:
764 cb.append(expr + '::' + repr((e.__class__, e)))
765
766 d = vim.Dictionary()
767 ned = vim.Dictionary(foo='bar', baz='abc')
768 dl = vim.Dictionary(a=1)
769 dl.locked = True
770 l = vim.List()
771 ll = vim.List('abc')
772 ll.locked = True
773 f = vim.Function('string')
774 fd = vim.Function('F')
775 fdel = vim.Function('D')
776 vim.command('delfunction D')
777
778 def subexpr_test(expr, name, subexprs):
779 cb.append('>>> Testing %s using %s' % (name, expr))
780 for subexpr in subexprs:
781 ee(expr % subexpr)
782 cb.append('<<< Finished')
783
784 def stringtochars_test(expr):
785 return subexpr_test(expr, 'StringToChars', (
786 '1', # Fail type checks
787 'u"\\0"', # Fail PyString_AsStringAndSize(bytes, , NULL) check
788 '"\\0"', # Fail PyString_AsStringAndSize(object, , NULL) check
789 ))
790
791 class Mapping(object):
792 def __init__(self, d):
793 self.d = d
794
795 def __getitem__(self, key):
796 return self.d[key]
797
798 def keys(self):
799 return self.d.keys()
800
801 def items(self):
802 return self.d.items()
803
804 def convertfrompyobject_test(expr, recurse=True):
805 # pydict_to_tv
806 stringtochars_test(expr % '{%s : 1}')
807 if recurse:
808 convertfrompyobject_test(expr % '{"abc" : %s}', False)
809 # pymap_to_tv
810 stringtochars_test(expr % 'Mapping({%s : 1})')
811 if recurse:
812 convertfrompyobject_test(expr % 'Mapping({"abc" : %s})', False)
813 # pyseq_to_tv
814 iter_test(expr)
815 return subexpr_test(expr, 'ConvertFromPyObject', (
816 'None', # Not conversible
817 '{"": 1}', # Empty key not allowed
818 'FailingMapping()', #
819 'FailingMappingKey()', #
820 ))
821
822 def convertfrompymapping_test(expr):
823 convertfrompyobject_test(expr)
824 return subexpr_test(expr, 'ConvertFromPyMapping', (
825 '[]',
826 ))
827
828 def iter_test(expr):
829 return subexpr_test(expr, '*Iter*', (
830 'FailingIter()',
831 'FailingIterNext()',
832 ))
833
834 class FailingTrue(object):
835 def __bool__(self):
836 raise NotImplementedError
837
838 class FailingIter(object):
839 def __iter__(self):
840 raise NotImplementedError
841
842 class FailingIterNext(object):
843 def __iter__(self):
844 return self
845
846 def __next__(self):
847 raise NotImplementedError
848
849 class FailingMappingKey(object):
850 def __getitem__(self, item):
851 raise NotImplementedError
852
853 def keys(self):
854 return list("abc")
855
856 class FailingMapping(object):
857 def __getitem__(self):
858 raise NotImplementedError
859
860 def keys(self):
861 raise NotImplementedError
862
863 class FailingList(list):
864 def __getitem__(self, idx):
865 if i == 2:
866 raise NotImplementedError
867 else:
868 return super(FailingList, self).__getitem__(idx)
869
870 cb.append("> Output")
871 cb.append(">> OutputSetattr")
872 ee('del sys.stdout.softspace')
873 ee('sys.stdout.softspace = []')
874 ee('sys.stdout.attr = None')
875 cb.append(">> OutputWrite")
876 ee('sys.stdout.write(None)')
877 cb.append(">> OutputWriteLines")
878 ee('sys.stdout.writelines(None)')
879 ee('sys.stdout.writelines([1])')
880 iter_test('sys.stdout.writelines(%s)')
881 cb.append("> VimCommand")
882 ee('vim.command(1)')
883 #! Not checked: vim->python exceptions translating: checked later
884 cb.append("> VimToPython")
885 #! Not checked: everything: needs errors in internal python functions
886 cb.append("> VimEval")
887 ee('vim.eval(1)')
888 #! Not checked: everything: needs errors in internal python functions
889 cb.append("> VimEvalPy")
890 ee('vim.bindeval(1)')
891 #! Not checked: vim->python exceptions translating: checked later
892 cb.append("> VimStrwidth")
893 ee('vim.strwidth(1)')
894 cb.append("> Dictionary")
895 cb.append(">> DictionaryConstructor")
896 ee('vim.Dictionary("abc")')
897 ##! Not checked: py_dict_alloc failure
898 cb.append(">> DictionarySetattr")
899 ee('del d.locked')
900 ee('d.locked = FailingTrue()')
901 ee('vim.vvars.locked = False')
902 ee('d.scope = True')
903 ee('d.xxx = True')
904 cb.append(">> _DictionaryItem")
905 ee('d.get("a", 2, 3)')
906 stringtochars_test('d.get(%s)')
907 ee('d.pop("a")')
908 ee('dl.pop("a")')
909 cb.append(">> DictionaryIterNext")
910 ee('for i in ned: ned["a"] = 1')
911 cb.append(">> DictionaryAssItem")
912 ee('dl["b"] = 1')
913 stringtochars_test('d[%s] = 1')
914 convertfrompyobject_test('d["a"] = %s')
915 cb.append(">> DictionaryUpdate")
916 cb.append(">>> kwargs")
917 cb.append(">>> iter")
918 ee('d.update(FailingMapping())')
919 ee('d.update([FailingIterNext()])')
920 iter_test('d.update(%s)')
921 convertfrompyobject_test('d.update(%s)')
922 stringtochars_test('d.update(((%s, 0),))')
923 convertfrompyobject_test('d.update((("a", %s),))')
924 cb.append(">> DictionaryPopItem")
925 ee('d.popitem(1, 2)')
926 cb.append(">> DictionaryHasKey")
927 ee('d.has_key()')
928 cb.append("> List")
929 cb.append(">> ListConstructor")
930 ee('vim.List(1, 2)')
931 ee('vim.List(a=1)')
932 iter_test('vim.List(%s)')
933 convertfrompyobject_test('vim.List([%s])')
934 cb.append(">> ListItem")
935 ee('l[1000]')
936 cb.append(">> ListAssItem")
937 ee('ll[1] = 2')
938 ee('l[1000] = 3')
939 cb.append(">> ListAssSlice")
940 ee('ll[1:100] = "abc"')
941 iter_test('l[:] = %s')
942 convertfrompyobject_test('l[:] = [%s]')
943 cb.append(">> ListConcatInPlace")
944 iter_test('l.extend(%s)')
945 convertfrompyobject_test('l.extend([%s])')
946 cb.append(">> ListSetattr")
947 ee('del l.locked')
948 ee('l.locked = FailingTrue()')
949 ee('l.xxx = True')
950 cb.append("> Function")
951 cb.append(">> FunctionConstructor")
952 ee('vim.Function("123")')
953 ee('vim.Function("xxx_non_existent_function_xxx")')
954 ee('vim.Function("xxx#non#existent#function#xxx")')
955 cb.append(">> FunctionCall")
956 convertfrompyobject_test('f(%s)')
957 convertfrompymapping_test('fd(self=%s)')
958 cb.append("> TabPage")
959 cb.append(">> TabPageAttr")
960 ee('vim.current.tabpage.xxx')
961 cb.append("> TabList")
962 cb.append(">> TabListItem")
963 ee('vim.tabpages[1000]')
964 cb.append("> Window")
965 cb.append(">> WindowAttr")
966 ee('vim.current.window.xxx')
967 cb.append(">> WindowSetattr")
968 ee('vim.current.window.buffer = 0')
969 ee('vim.current.window.cursor = (10000000000, 100000000)')
970 ee('vim.current.window.cursor = True')
971 ee('vim.current.window.height = "abc"')
972 ee('vim.current.window.width = "abc"')
973 ee('vim.current.window.xxxxxx = True')
974 cb.append("> WinList")
975 cb.append(">> WinListItem")
976 ee('vim.windows[1000]')
977 cb.append("> Buffer")
978 cb.append(">> StringToLine (indirect)")
979 ee('vim.current.buffer[0] = "\\na"')
980 cb.append(">> SetBufferLine (indirect)")
981 ee('vim.current.buffer[0] = True')
982 cb.append(">> SetBufferLines (indirect)")
983 ee('vim.current.buffer[:] = True')
984 ee('vim.current.buffer[:] = ["\\na", "bc"]')
985 cb.append(">> InsertBufferLines (indirect)")
986 ee('vim.current.buffer.append(None)')
987 ee('vim.current.buffer.append(["\\na", "bc"])')
988 ee('vim.current.buffer.append("\\nbc")')
989 cb.append(">> RBItem")
990 ee('vim.current.buffer[10000000000]')
991 cb.append(">> RBAsItem")
992 ee('vim.current.buffer[10000000000] = ""')
993 cb.append(">> BufferAttr")
994 ee('vim.current.buffer.xxx')
995 cb.append(">> BufferSetattr")
996 ee('vim.current.buffer.name = True')
997 ee('vim.current.buffer.xxx = True')
998 cb.append(">> BufferMark")
999 ee('vim.current.buffer.mark(0)')
1000 ee('vim.current.buffer.mark("abc")')
1001 ee('vim.current.buffer.mark("!")')
1002 cb.append(">> BufferRange")
1003 ee('vim.current.buffer.range(1, 2, 3)')
1004 cb.append("> BufMap")
1005 cb.append(">> BufMapItem")
1006 ee('vim.buffers[None]')
1007 ee('vim.buffers[100000000]')
1008 cb.append("> Current")
1009 cb.append(">> CurrentGetattr")
1010 ee('vim.current.xxx')
1011 cb.append(">> CurrentSetattr")
1012 ee('vim.current.line = True')
1013 ee('vim.current.buffer = True')
1014 ee('vim.current.window = True')
1015 ee('vim.current.tabpage = True')
1016 ee('vim.current.xxx = True')
1017 EOF
1018 :"
749 :" Test exceptions 1019 :" Test exceptions
750 :fun Exe(e) 1020 :fun Exe(e)
751 : execute a:e 1021 : execute a:e
752 :endfun 1022 :endfun
753 py3 << EOF 1023 py3 << EOF
754 def ee(expr, g=globals(), l=locals()):
755 try:
756 exec(expr, g, l)
757 except Exception as e:
758 cb.append(repr((e.__class__, e)))
759 Exe = vim.bindeval('function("Exe")') 1024 Exe = vim.bindeval('function("Exe")')
760 ee('vim.command("throw \'abc\'")') 1025 ee('vim.command("throw \'abc\'")')
761 ee('Exe("throw \'def\'")') 1026 ee('Exe("throw \'def\'")')
762 ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")') 1027 ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
763 ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")') 1028 ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')