comparison src/testdir/test_vim9_expr.vim @ 28008:cc7d54a134e4 v8.2.4529

patch 8.2.4529: Vim9: comparing partial with function fails Commit: https://github.com/vim/vim/commit/ed0c62e7b16b62655824df28cdd6bd75aadbb8fc Author: Bram Moolenaar <Bram@vim.org> Date: Tue Mar 8 19:43:55 2022 +0000 patch 8.2.4529: Vim9: comparing partial with function fails Problem: Vim9: comparing partial with function fails. Solution: Support this comparison. Avoid a crash. (closes https://github.com/vim/vim/issues/9909) Add more test cases.
author Bram Moolenaar <Bram@vim.org>
date Tue, 08 Mar 2022 20:45:03 +0100
parents e6e3abc28c7a
children 53e2bf6032e5
comparison
equal deleted inserted replaced
28007:e11bea0167bb 28008:cc7d54a134e4
715 def Test_expr4_compare_null() 715 def Test_expr4_compare_null()
716 g:null_dict = test_null_dict() 716 g:null_dict = test_null_dict()
717 g:not_null_list = [] 717 g:not_null_list = []
718 var lines =<< trim END 718 var lines =<< trim END
719 assert_true(test_null_blob() == v:null) 719 assert_true(test_null_blob() == v:null)
720 assert_true(null_blob == null)
720 assert_true(v:null == test_null_blob()) 721 assert_true(v:null == test_null_blob())
722 assert_true(null == null_blob)
721 assert_false(test_null_blob() != v:null) 723 assert_false(test_null_blob() != v:null)
724 assert_false(null_blob != null)
722 assert_false(v:null != test_null_blob()) 725 assert_false(v:null != test_null_blob())
726 assert_false(null != null_blob)
723 727
724 if has('channel') 728 if has('channel')
725 assert_true(test_null_channel() == v:null) 729 assert_true(test_null_channel() == v:null)
730 assert_true(null_channel == null)
726 assert_true(v:null == test_null_channel()) 731 assert_true(v:null == test_null_channel())
732 assert_true(null == null_channel)
727 assert_false(test_null_channel() != v:null) 733 assert_false(test_null_channel() != v:null)
734 assert_false(null_channel != null)
728 assert_false(v:null != test_null_channel()) 735 assert_false(v:null != test_null_channel())
736 assert_false(null != null_channel)
729 endif 737 endif
730 738
731 assert_true(test_null_dict() == v:null) 739 assert_true(test_null_dict() == v:null)
740 assert_true(null_dict == null)
732 assert_true(v:null == test_null_dict()) 741 assert_true(v:null == test_null_dict())
742 assert_true(null == null_dict)
733 assert_false(test_null_dict() != v:null) 743 assert_false(test_null_dict() != v:null)
744 assert_false(null_dict != null)
734 assert_false(v:null != test_null_dict()) 745 assert_false(v:null != test_null_dict())
746 assert_false(null != null_dict)
735 747
736 assert_true(g:null_dict == v:null) 748 assert_true(g:null_dict == v:null)
737 assert_true(v:null == g:null_dict) 749 assert_true(v:null == g:null_dict)
738 assert_false(g:null_dict != v:null) 750 assert_false(g:null_dict != v:null)
739 assert_false(v:null != g:null_dict) 751 assert_false(v:null != g:null_dict)
740 752
741 assert_true(test_null_function() == v:null) 753 assert_true(test_null_function() == v:null)
754 assert_true(null_function == null)
742 assert_true(v:null == test_null_function()) 755 assert_true(v:null == test_null_function())
756 assert_true(null == null_function)
743 assert_false(test_null_function() != v:null) 757 assert_false(test_null_function() != v:null)
758 assert_false(null_function != null)
744 assert_false(v:null != test_null_function()) 759 assert_false(v:null != test_null_function())
760 assert_false(null != null_function)
745 761
746 if has('job') 762 if has('job')
747 assert_true(test_null_job() == v:null) 763 assert_true(test_null_job() == v:null)
764 assert_true(null_job == null)
748 assert_true(v:null == test_null_job()) 765 assert_true(v:null == test_null_job())
766 assert_true(null == null_job)
749 assert_false(test_null_job() != v:null) 767 assert_false(test_null_job() != v:null)
768 assert_false(null_job != null)
750 assert_false(v:null != test_null_job()) 769 assert_false(v:null != test_null_job())
770 assert_false(null != null_job)
751 endif 771 endif
752 772
753 assert_true(test_null_list() == v:null) 773 assert_true(test_null_list() == v:null)
774 assert_true(null_list == null)
754 assert_true(v:null == test_null_list()) 775 assert_true(v:null == test_null_list())
776 assert_true(null == null_list)
755 assert_false(test_null_list() != v:null) 777 assert_false(test_null_list() != v:null)
778 assert_false(null_list != null)
756 assert_false(v:null != test_null_list()) 779 assert_false(v:null != test_null_list())
780 assert_false(null != null_list)
757 781
758 assert_false(g:not_null_list == v:null) 782 assert_false(g:not_null_list == v:null)
759 assert_false(v:null == g:not_null_list) 783 assert_false(v:null == g:not_null_list)
760 assert_true(g:not_null_list != v:null) 784 assert_true(g:not_null_list != v:null)
761 assert_true(v:null != g:not_null_list) 785 assert_true(v:null != g:not_null_list)
762 786
763 assert_true(test_null_partial() == v:null) 787 assert_true(test_null_partial() == v:null)
788 assert_true(null_partial == null)
764 assert_true(v:null == test_null_partial()) 789 assert_true(v:null == test_null_partial())
790 assert_true(null == null_partial)
765 assert_false(test_null_partial() != v:null) 791 assert_false(test_null_partial() != v:null)
792 assert_false(null_partial != null)
766 assert_false(v:null != test_null_partial()) 793 assert_false(v:null != test_null_partial())
794 assert_false(null != null_partial)
767 795
768 assert_true(test_null_string() == v:null) 796 assert_true(test_null_string() == v:null)
797 assert_true(null_string == null)
769 assert_true(v:null == test_null_string()) 798 assert_true(v:null == test_null_string())
799 assert_true(null == null_string)
770 assert_false(test_null_string() != v:null) 800 assert_false(test_null_string() != v:null)
801 assert_false(null_string != null)
771 assert_false(v:null != test_null_string()) 802 assert_false(v:null != test_null_string())
803 assert_false(null != null_string)
772 END 804 END
773 v9.CheckDefAndScriptSuccess(lines) 805 v9.CheckDefAndScriptSuccess(lines)
774 unlet g:null_dict 806 unlet g:null_dict
775 unlet g:not_null_list 807 unlet g:not_null_list
808
809 lines =<< trim END
810 var d: dict<func> = {f: null_function}
811 assert_equal(null_function, d.f)
812 END
813 v9.CheckDefAndScriptSuccess(lines)
776 814
777 v9.CheckDefAndScriptFailure(['echo 123 == v:null'], 'E1072: Cannot compare number with special') 815 v9.CheckDefAndScriptFailure(['echo 123 == v:null'], 'E1072: Cannot compare number with special')
778 v9.CheckDefAndScriptFailure(['echo v:null == 123'], 'E1072: Cannot compare special with number') 816 v9.CheckDefAndScriptFailure(['echo v:null == 123'], 'E1072: Cannot compare special with number')
779 v9.CheckDefAndScriptFailure(['echo 123 != v:null'], 'E1072: Cannot compare number with special') 817 v9.CheckDefAndScriptFailure(['echo 123 != v:null'], 'E1072: Cannot compare number with special')
780 v9.CheckDefAndScriptFailure(['echo v:null != 123'], 'E1072: Cannot compare special with number') 818 v9.CheckDefAndScriptFailure(['echo v:null != 123'], 'E1072: Cannot compare special with number')