]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
runtests: remove "has_textaware"
authorDaniel Stenberg <daniel@haxx.se>
Thu, 29 Aug 2024 14:00:21 +0000 (16:00 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 29 Aug 2024 18:24:40 +0000 (20:24 +0200)
All sections defined with the mode="text" attribute now get line endings
normalized so that comparisons become line ending agnostic. Removes the
previous problem of figuring out how exactly different Windows
environments should be treated in this regard.

Closes #14717

tests/runtests.pl

index 293d6d38ed6eb9f149e5669db2c296cbfe176148..8956398166e33cd9c5863f68979a26266940a9e4 100755 (executable)
@@ -132,9 +132,6 @@ my $ftp_ipv6;       # set if FTP server has IPv6 support
 
 my $resolver;       # name of the resolver backend (for human presentation)
 
-my $has_textaware;  # set if running on a system that has a text mode concept
-                    # on files. Windows for example
-
 my %skipped;    # skipped{reason}=counter, reasons for skip
 my @teststat;   # teststat[testnum]=reason, reasons for skip
 my %disabled_keywords;  # key words of tests to skip
@@ -539,7 +536,6 @@ sub checksystemfeatures {
                 # This is a Windows MinGW build or native build, we need to use
                 # Windows-style path.
                 $pwd = sys_native_current_path();
-                $has_textaware = 1;
                 $feature{"win32"} = 1;
                 # set if built with MinGW (as opposed to MinGW-w64)
                 $feature{"MinGW"} = 1 if ($curl =~ /-pc-mingw32/);
@@ -1199,6 +1195,12 @@ sub singletest_count {
     return 0;
 }
 
+# Make sure all line endings in the array are the same: CRLF
+sub normalize_text {
+    my ($ref) = @_;
+    s/\r\n/\n/g for @$ref;
+    s/\n/\r\n/g for @$ref;
+}
 
 #######################################################################
 # Verify test succeeded
@@ -1257,12 +1259,9 @@ sub singletest_check {
 
         # get the mode attribute
         my $filemode=$hash{'mode'};
-        if($filemode && ($filemode eq "text") && $has_textaware) {
-            # text mode when running on Windows: fix line endings
-            s/\r\n/\n/g for @validstdout;
-            s/\n/\r\n/g for @validstdout;
-            s/\r\n/\n/g for @actual;
-            s/\n/\r\n/g for @actual;
+        if($filemode && ($filemode eq "text")) {
+            normalize_text(\@validstdout);
+            normalize_text(\@actual);
         }
 
         if($hash{'nonewline'}) {
@@ -1315,12 +1314,11 @@ sub singletest_check {
             # text mode check in hyper-mode. Sometimes necessary if the stderr
             # data *looks* like HTTP and thus has gotten CRLF newlines
             # mistakenly
-            s/\r\n/\n/g for @validstderr;
+            normalize_text(\@validstderr);
         }
-        if($filemode && ($filemode eq "text") && $has_textaware) {
-            # text mode when running on Windows: fix line endings
-            s/\r\n/\n/g for @validstderr;
-            s/\n/\r\n/g for @validstderr;
+        if($filemode && ($filemode eq "text")) {
+            normalize_text(\@validstderr);
+            normalize_text(\@actual);
         }
 
         if($hash{'nonewline'}) {
@@ -1412,10 +1410,8 @@ sub singletest_check {
                 my %replycheckpartattr = getpartattr("reply", "datacheck".$partsuffix);
                 # get the mode attribute
                 my $filemode=$replycheckpartattr{'mode'};
-                if($filemode && ($filemode eq "text") && $has_textaware) {
-                    # text mode when running on Windows: fix line endings
-                    s/\r\n/\n/g for @replycheckpart;
-                    s/\n/\r\n/g for @replycheckpart;
+                if($filemode && ($filemode eq "text")) {
+                    normalize_text(\@replycheckpart);
                 }
                 if($replycheckpartattr{'nonewline'}) {
                     # Yes, we must cut off the final newline from the final line
@@ -1442,10 +1438,8 @@ sub singletest_check {
         }
         # get the mode attribute
         my $filemode=$replyattr{'mode'};
-        if($filemode && ($filemode eq "text") && $has_textaware) {
-            # text mode when running on Windows: fix line endings
-            s/\r\n/\n/g for @reply;
-            s/\n/\r\n/g for @reply;
+        if($filemode && ($filemode eq "text")) {
+            normalize_text(\@reply);
         }
         if($replyattr{'crlf'} ||
            ($feature{"hyper"} && ($keywords{"HTTP"}
@@ -1457,6 +1451,12 @@ sub singletest_check {
     if(!$replyattr{'nocheck'} && (@reply || $replyattr{'sendzero'})) {
         # verify the received data
         my @out = loadarray($CURLOUT);
+
+        # get the mode attribute
+        my $filemode=$replyattr{'mode'};
+        if($filemode && ($filemode eq "text")) {
+            normalize_text(\@out);
+        }
         $res = compare($runnerid, $testnum, $testname, "data", \@out, \@reply);
         if ($res) {
             return -1;
@@ -1586,10 +1586,9 @@ sub singletest_check {
             my @stripfilepar = getpart("verify", "stripfile".$partsuffix);
 
             my $filemode=$hash{'mode'};
-            if($filemode && ($filemode eq "text") && $has_textaware) {
-                # text mode when running on Windows: fix line endings
-                s/\r\n/\n/g for @outfile;
-                s/\n/\r\n/g for @outfile;
+            if($filemode && ($filemode eq "text")) {
+                normalize_text(\@outfile);
+                normalize_text(\@generated);
             }
             if($hash{'crlf'} ||
                ($feature{"hyper"} && ($keywords{"HTTP"}