Show More
@@ -747,67 +747,6 b' def linematch(el, l):' | |||
|
747 | 747 | return '+glob' |
|
748 | 748 | return False |
|
749 | 749 | |
|
750 | def tsttest(t, wd, options, salt, after, expected, exitcode, output): | |
|
751 | # Merge the script output back into a unified test | |
|
752 | ||
|
753 | warnonly = 1 # 1: not yet, 2: yes, 3: for sure not | |
|
754 | if exitcode != 0: # failure has been reported | |
|
755 | warnonly = 3 # set to "for sure not" | |
|
756 | pos = -1 | |
|
757 | postout = [] | |
|
758 | for l in output: | |
|
759 | lout, lcmd = l, None | |
|
760 | if salt in l: | |
|
761 | lout, lcmd = l.split(salt, 1) | |
|
762 | ||
|
763 | if lout: | |
|
764 | if not lout.endswith('\n'): | |
|
765 | lout += ' (no-eol)\n' | |
|
766 | ||
|
767 | # find the expected output at the current position | |
|
768 | el = None | |
|
769 | if pos in expected and expected[pos]: | |
|
770 | el = expected[pos].pop(0) | |
|
771 | ||
|
772 | r = linematch(el, lout) | |
|
773 | if isinstance(r, str): | |
|
774 | if r == '+glob': | |
|
775 | lout = el[:-1] + ' (glob)\n' | |
|
776 | r = '' # warn only this line | |
|
777 | elif r == '-glob': | |
|
778 | lout = ''.join(el.rsplit(' (glob)', 1)) | |
|
779 | r = '' # warn only this line | |
|
780 | else: | |
|
781 | log('\ninfo, unknown linematch result: %r\n' % r) | |
|
782 | r = False | |
|
783 | if r: | |
|
784 | postout.append(" " + el) | |
|
785 | else: | |
|
786 | if needescape(lout): | |
|
787 | lout = stringescape(lout.rstrip('\n')) + " (esc)\n" | |
|
788 | postout.append(" " + lout) # let diff deal with it | |
|
789 | if r != '': # if line failed | |
|
790 | warnonly = 3 # set to "for sure not" | |
|
791 | elif warnonly == 1: # is "not yet" (and line is warn only) | |
|
792 | warnonly = 2 # set to "yes" do warn | |
|
793 | ||
|
794 | if lcmd: | |
|
795 | # add on last return code | |
|
796 | ret = int(lcmd.split()[1]) | |
|
797 | if ret != 0: | |
|
798 | postout.append(" [%s]\n" % ret) | |
|
799 | if pos in after: | |
|
800 | # merge in non-active test bits | |
|
801 | postout += after.pop(pos) | |
|
802 | pos = int(lcmd.split()[0]) | |
|
803 | ||
|
804 | if pos in after: | |
|
805 | postout += after.pop(pos) | |
|
806 | ||
|
807 | if warnonly == 2: | |
|
808 | exitcode = False # set exitcode to warned | |
|
809 | return exitcode, postout | |
|
810 | ||
|
811 | 750 | class TTest(Test): |
|
812 | 751 | """A "t test" is a test backed by a .t file.""" |
|
813 | 752 | |
@@ -834,8 +773,7 b' class TTest(Test):' | |||
|
834 | 773 | if exitcode == SKIPPED_STATUS or output is None: |
|
835 | 774 | return exitcode, output |
|
836 | 775 | |
|
837 |
return |
|
|
838 | exitcode, output) | |
|
776 | return self._processoutput(exitcode, output, salt, after, expected) | |
|
839 | 777 | |
|
840 | 778 | def _hghave(self, reqs, testtmp): |
|
841 | 779 | # TODO do something smarter when all other uses of hghave are gone. |
@@ -959,6 +897,67 b' class TTest(Test):' | |||
|
959 | 897 | |
|
960 | 898 | return salt, script, after, expected |
|
961 | 899 | |
|
900 | def _processoutput(self, exitcode, output, salt, after, expected): | |
|
901 | # Merge the script output back into a unified test. | |
|
902 | warnonly = 1 # 1: not yet; 2: yes; 3: for sure not | |
|
903 | if exitcode != 0: | |
|
904 | warnonly = 3 | |
|
905 | ||
|
906 | pos = -1 | |
|
907 | postout = [] | |
|
908 | for l in output: | |
|
909 | lout, lcmd = l, None | |
|
910 | if salt in l: | |
|
911 | lout, lcmd = l.split(salt, 1) | |
|
912 | ||
|
913 | if lout: | |
|
914 | if not lout.endswith('\n'): | |
|
915 | lout += ' (no-eol)\n' | |
|
916 | ||
|
917 | # Find the expected output at the current position. | |
|
918 | el = None | |
|
919 | if expected.get(pos, None): | |
|
920 | el = expected[pos].pop(0) | |
|
921 | ||
|
922 | r = linematch(el, lout) | |
|
923 | if isinstance(r, str): | |
|
924 | if r == '+glob': | |
|
925 | lout = el[:-1] + ' (glob)\n' | |
|
926 | r = '' # Warn only this line. | |
|
927 | elif r == '-glob': | |
|
928 | lout = ''.join(el.rsplit(' (glob)', 1)) | |
|
929 | r = '' # Warn only this line. | |
|
930 | else: | |
|
931 | log('\ninfo, unknown linematch result: %r\n' % r) | |
|
932 | r = False | |
|
933 | if r: | |
|
934 | postout.append(' ' + el) | |
|
935 | else: | |
|
936 | if needescape(lout): | |
|
937 | lout = stringescape(lout.rstrip('\n')) + ' (esc)\n' | |
|
938 | postout.append(' ' + lout) # Let diff deal with it. | |
|
939 | if r != '': # If line failed. | |
|
940 | warnonly = 3 # for sure not | |
|
941 | elif warnonly == 1: # Is "not yet" and line is warn only. | |
|
942 | warnonly = 2 # Yes do warn. | |
|
943 | ||
|
944 | if lcmd: | |
|
945 | # Add on last return code. | |
|
946 | ret = int(lcmd.split()[1]) | |
|
947 | if ret != 0: | |
|
948 | postout.append(' [%s]\n' % ret) | |
|
949 | if pos in after: | |
|
950 | # Merge in non-active test bits. | |
|
951 | postout += after.pop(pos) | |
|
952 | pos = int(lcmd.split()[0]) | |
|
953 | ||
|
954 | if pos in after: | |
|
955 | postout += after.pop(pos) | |
|
956 | ||
|
957 | if warnonly == 2: | |
|
958 | exitcode = False # Set exitcode to warned. | |
|
959 | ||
|
960 | return exitcode, postout | |
|
962 | 961 | |
|
963 | 962 | wifexited = getattr(os, "WIFEXITED", lambda x: False) |
|
964 | 963 | def run(cmd, wd, options, replacements, env): |
General Comments 0
You need to be logged in to leave comments.
Login now