Changeset: c3271f07a3cf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c3271f07a3cf
Modified Files:
        testing/sqllogictest.py
Branch: Dec2025
Log Message:

Improve reporting of differences when tests fail.


diffs (73 lines):

diff --git a/testing/sqllogictest.py b/testing/sqllogictest.py
--- a/testing/sqllogictest.py
+++ b/testing/sqllogictest.py
@@ -615,7 +615,12 @@ class SQLLogic:
                 result.append(col)
             if err and expected is not None and self.out:
                 print('Differences:', file=self.out)
-                self.out.writelines(list(difflib.ndiff([x + '\n' for x in 
expected], [x + '\n' for x in ndata])))
+                print('\n'.join(difflib.context_diff(expected,
+                                                     ndata,
+                                                     fromfile='expected',
+                                                     tofile='received',
+                                                     lineterm='')),
+                      file=self.out)
             if resdata is not None:
                 result = []
                 ndata = []
@@ -688,7 +693,12 @@ class SQLLogic:
                         recv.append(col)
                 if self.out:
                     print('Differences:', file=self.out)
-                    self.out.writelines(list(difflib.ndiff([x + '\n' for x in 
expected], [x + '\n' for x in recv])))
+                    print('\n'.join(difflib.context_diff(expected,
+                                                         recv,
+                                                         fromfile='expected',
+                                                         tofile='received',
+                                                         lineterm='')),
+                          file=self.out)
             if resdata is not None:
                 result = []
                 for row in resdata:
@@ -701,26 +711,26 @@ class SQLLogic:
             if sorting == 'rowsort':
                 ndata = sorted(data)
             err_msg_buff = []
+            received = []
             for row in ndata:
                 for col in row:
-                    if expected is not None:
-                        if i < len(expected) and col != expected[i]:
-                            err_msg_buff.append('unexpected value;\nreceived 
"%s"\nexpected "%s"' % (col, expected[i]))
-                            #self.query_error(query, 'unexpected value; 
received "%s", expected "%s"' % (col, expected[i]), data=data)
-                            err = True
-                        i += 1
+                    received.append(col)
                     m.update(bytes(col, encoding='utf-8'))
                     m.update(b'\n')
                     result.append(col)
-            if err and expected is not None:
-                self.query_error(query, '\n'.join(err_msg_buff))
-                recv = []
-                for row in ndata:
-                    for col in row:
-                        recv.append(col + '\n')
-                if self.out:
-                    print('Differences:', file=self.out)
-                    self.out.writelines(list(difflib.ndiff([x + '\n' for x in 
expected], recv)))
+            if expected is not None:
+                diffs = list(difflib.context_diff(expected,
+                                                  received,
+                                                  fromfile='expected',
+                                                  tofile='received',
+                                                  lineterm=''))
+                if diffs:
+                    if not err:
+                        self.query_error(query, 'unexpected output')
+                    err = True
+                    if self.out:
+                        print('Differences:', file=self.out)
+                        print('\n'.join(diffs), file=self.out)
             if resdata is not None:
                 if sorting == 'rowsort':
                     resdata.sort()
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to