Mercurial > vim
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\'\'\')")') |