<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/0b4196faeb18890c8ce17134e9b50058b8a3428f">https://github.com/macports/macports-base/commit/0b4196faeb18890c8ce17134e9b50058b8a3428f</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 0b4196f  port lint: lint checksums much more thoroughly
</span><span style='display:block; white-space:pre;color:#404040;'>     new 83eeb59  Merge pull request #105 from herbygillot/lint-checksum
</span>0b4196f is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 0b4196faeb18890c8ce17134e9b50058b8a3428f
</span>Author: Herby Gillot <herby.gillot@gmail.com>
AuthorDate: Thu Sep 6 02:02:22 2018 -0400

<span style='display:block; white-space:pre;color:#404040;'>    port lint: lint checksums much more thoroughly
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Error on invalid checksum types, unrecognized fields and malformed
</span><span style='display:block; white-space:pre;color:#404040;'>    checksums, and warn about missing recommended checksum types, or when a
</span><span style='display:block; white-space:pre;color:#404040;'>    port is only using deprecated checksum types.
</span>---
 src/port1.0/portchecksum.tcl        |  61 +++-
 src/port1.0/portlint.tcl            | 143 +++++++-
 src/port1.0/tests/portchecksum.test |  51 +++
 src/port1.0/tests/portlint.test     | 647 ++++++++++++++++++++++++++++++++++++
 4 files changed, 887 insertions(+), 15 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portchecksum.tcl b/src/port1.0/portchecksum.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index e13f17e..0b53af9 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portchecksum.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portchecksum.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -40,6 +40,13 @@ target_requires ${org.macports.checksum} main fetch
</span> target_prerun ${org.macports.checksum} portchecksum::checksum_start
 
 namespace eval portchecksum {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # The list of the types of checksums we know.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable checksum_types [list md5 sha1 rmd160 sha256 size]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # types to recommend if none are specified in the portfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable default_checksum_types [list rmd160 sha256 size]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> }
 
 # Options
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -51,14 +58,43 @@ default checksum.skip false
</span> 
 set_ui_prefix
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# The list of the types of checksums we know.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set checksum_types [list md5 sha1 rmd160 sha256 size]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# verify_checksum_format
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Given a checksum type as string and the actual checksum:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - return 1  if the value has the expected format
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - return 0  if the value does not look as expected
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - return -1 if the checksum type is unrecognized
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portchecksum::verify_checksum_format {type value} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set result 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch [string tolower $type] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sha256 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          set result [regexp {^\w{64}$} $value]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        rmd160 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          set result [regexp {^\w{40}$} $value]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sha1 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          set result [regexp {^\w{40}$} $value]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        md5 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          set result [regexp {^\w{32}$} $value]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        size {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          set result [regexp {^\d+$} $value]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          # unrecognized checksum type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          set result -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return $result
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
 # The number of types we know.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set checksum_types_count [llength $checksum_types]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# types to recommend if none are specified in the portfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set default_checksum_types [list rmd160 sha256 size]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set checksum_types_count [llength $portchecksum::checksum_types]
</span> 
 # Using global all_dist_files, parse the checksums and store them into the
 # global array checksums_array.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -70,12 +106,12 @@ set default_checksum_types [list rmd160 sha256 size]
</span> # Portfile is in format #1 if:
 # (1) There is only one distfile.
 # (2) There are an even number of words in checksums (i.e. "md5 cksum sha1 cksum" = 4 words).
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# (3) There are no more than $checksum_types_count checksums specified.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# (3) There are no more than $portchecksum::checksum_types_count checksums specified.
</span> # (4) first word is one of the checksums types.
 #
 # return yes if the syntax was correct, no if there was a problem.
 proc portchecksum::parse_checksums {checksums_str} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global checksums_array all_dist_files checksum_types checksum_types_count
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global checksums_array all_dist_files checksum_types_count
</span> 
     # Parse the string of checksums.
     set nb_checksum [llength $checksums_str]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -83,7 +119,7 @@ proc portchecksum::parse_checksums {checksums_str} {
</span>     if {[llength $all_dist_files] == 1
         && [expr {$nb_checksum % 2}] == 0
         && [expr {$nb_checksum / 2}] <= $checksum_types_count
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        && [lindex $checksums_str 0] in $checksum_types} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        && [lindex $checksums_str 0] in $portchecksum::checksum_types} {
</span>         # Convert to format #2
         set checksums_str [linsert $checksums_str 0 [lindex $all_dist_files 0]]
         # We increased the size.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -112,7 +148,7 @@ proc portchecksum::parse_checksums {checksums_str} {
</span>             incr ix_checksum
             while {1} {
                 set checksum_type [lindex $checksums_str $ix_checksum]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {$checksum_type in $checksum_types} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {$checksum_type in $portchecksum::checksum_types} {
</span>                     # append the type and the value.
                     incr ix_checksum
                     set checksum_value [lindex $checksums_str $ix_checksum]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -207,8 +243,7 @@ proc portchecksum::checksum_start {args} {
</span> # Target main procedure. Verifies the checksums of all distfiles.
 #
 proc portchecksum::checksum_main {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global UI_PREFIX all_dist_files checksum_types checksums_array portverbose checksum.skip \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           default_checksum_types
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX all_dist_files checksums_array portverbose checksum.skip
</span> 
     # If no files have been downloaded, there is nothing to checksum.
     if {![info exists all_dist_files]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -317,7 +352,7 @@ proc portchecksum::checksum_main {args} {
</span>                     lappend sums $distfile
                 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                set missing_types $default_checksum_types
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set missing_types $portchecksum::default_checksum_types
</span> 
                 # Append the string for the calculated types and note any of
                 # our default types that were already calculated
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portlint.tcl b/src/port1.0/portlint.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 8727a17..2083740 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portlint.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portlint.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,6 +30,7 @@
</span> 
 package provide portlint 1.0
 package require portutil 1.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+package require portchecksum 1.0
</span> 
 set org.macports.lint [target_new org.macports.lint portlint::lint_main]
 target_runtype ${org.macports.lint} always
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -115,6 +116,137 @@ proc portlint::seems_utf8 {str} {
</span>     return true
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# lint_checksum_types
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Given a list of checksum types, return a list of strings which are warnings
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# about deprecated checksum types, or missing recommended types.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Returns an empty list if no issues are found.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portlint::lint_checksum_type_list {types} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set issues [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set using_recc false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach preferred $portchecksum::default_checksum_types {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$preferred in $types} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set using_recc true
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$preferred ni $types} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend issues "missing recommended checksum type: $preferred"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {!$using_recc} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach type $types {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$type ni $portchecksum::default_checksum_types} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend issues "checksum type is deprecated: $type"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return $issues
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# lint_checksum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Checks a given Portfile checksum string.  Returns a list of lists.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The first member list is a list of error strings.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The second member list is a list of warning strings.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Returns a list containing two empty lists if no issues are found.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portlint::lint_checksum {checksum_string} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set is_error false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ctr_start 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set filename ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set pfx ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set has_filenames false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set types [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # List of all tokens in the checksum string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum_tokens [regexp -all -inline {\S+} $checksum_string]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lindex $checksum_tokens 0] eq "checksum"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        incr ctr_start
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    for {set ctr $ctr_start} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {($ctr < [llength $checksum_tokens]) && !$is_error} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set current [lindex $checksum_tokens $ctr]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$current in $portchecksum::checksum_types} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set c_type  $current
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set c_value [lindex $checksum_tokens $ctr+1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            switch [portchecksum::verify_checksum_format $c_type $c_value] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                1 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # checksum type recognized, and checksum looks good
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    incr ctr 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    lappend types $c_type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                0 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # checksum type recognized, but checksum looks bad
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    lappend errors "${pfx}checksum type $c_type, but\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    checksum is invalid: $c_value"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    incr ctr 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                -1 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # checksum type not recognized
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    lappend errors "${pfx}invalid checksum type: $c_type\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    $c_value"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set is_error true
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif {($ctr > $ctr_start) && !$has_filenames} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend errors "invalid checksum field: $current"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set is_error true
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$ctr == $ctr_start} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set has_filenames true
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif {($ctr == ([llength $checksum_tokens] - 1)) || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         ([portchecksum::verify_checksum_format \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            [lindex $checksum_tokens $ctr-2] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            [lindex $checksum_tokens $ctr-1] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          ] != 1)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend errors "invalid checksum field: $current"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set is_error true
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[llength $types] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set types_lint [portlint::lint_checksum_type_list $types]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                foreach lint_issue $types_lint {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    lappend warnings "${pfx}${lint_issue}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set filename $current
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set pfx "$filename - "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set types [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            incr ctr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $types] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set types_lint [portlint::lint_checksum_type_list $types]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach lint_issue $types_lint {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend warnings "${pfx}${lint_issue}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [list $errors $warnings]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
 proc portlint::lint_start {args} {
     global UI_PREFIX subport
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -557,8 +689,15 @@ proc portlint::lint_main {args} {
</span>     }
 
     if {[info exists checksums]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![regexp {size\s+(\d+)} $checksums]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_warn "Checksum(s) should include the 'size' field"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set checksum_lint [portlint::lint_checksum $checksums]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach err [lindex $checksum_lint 0] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_error $err
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            incr errors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach warning [lindex $checksum_lint 1] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_warn $warning
</span>             incr warnings
         }
     }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/tests/portchecksum.test b/src/port1.0/tests/portchecksum.test
</span><span style='display:block; white-space:pre;color:#808080;'>index d363e60..65e381b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/tests/portchecksum.test
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/tests/portchecksum.test
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -105,6 +105,57 @@ test calc_sha256 {
</span>     file delete -force $pwd/file
 } -result "Calc sha256 successful."
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+test verify_checksum_format_md5 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Test that we properly verify an MD5 checksum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "9f70ecc1095ff10df81be6b5f218328d"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[portchecksum::verify_checksum_format "md5" $checksum] != 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: did not verify $checksum as MD5"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "Verify MD5 successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "Verify MD5 successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test verify_checksum_format_sha1 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Test that we properly verify an SHA1 checksum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "5560df60ff202ca8b8c3dcf51ad650b78e859261"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[portchecksum::verify_checksum_format "sha1" $checksum] != 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: did not verify $checksum as SHA1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "Verify SHA1 successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "Verify SHA1 successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test verify_checksum_format_rmd160 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Test that we properly verify an rmd160 checksum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "5aee5d12fe536e2e288e9f1daafd84f1bc17c3e6"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[portchecksum::verify_checksum_format "rmd160" $checksum] != 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: did not verify $checksum as rmd160"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "Verify rmd160 successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "Verify rmd160 successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test verify_checksum_format_sha256 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Test that we properly verify an SHA256 checksum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "2f686816f2a80e8efcc4ef40ac4e898d27ce4205a61ee422d56f8c5e8b46612e"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[portchecksum::verify_checksum_format "sha256" $checksum] != 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: did not verify $checksum as sha256"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "Verify sha256 successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "Verify sha256 successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test verify_unknown_checksum_format {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Test that we respond as expected to an unknown checksum format
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "thisisnotread"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[portchecksum::verify_checksum_format "lol22" $checksum] != -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: did not respond as expected to an unknown checksum"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "Verify unknown successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "Verify unknown successful"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> 
 # test checksum_start
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/tests/portlint.test b/src/port1.0/tests/portlint.test
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..ac5ae22
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/tests/portlint.test
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,647 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+package require tcltest 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+namespace import tcltest::*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set pwd [file dirname [file normalize $argv0]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+source ../port_test_autoconf.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+package require macports 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+array set ui_options {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#set ui_options(ports_debug)   yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#set ui_options(ports_verbose) yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+mportinit ui_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+package require portlint 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_type_list {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we get no warnings if we pass in the list of recommended
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksum types to lint_checksum_type_list.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set preferred_checksum_types [list rmd160 sha256 size]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum_type_list $preferred_checksum_types]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpected results"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_type_list passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_type_list passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_type_list_missing_recommended {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we are warned about a missing recommended field in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    list of checksums types passed to lint_checksum_type_list.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set preferred_checksum_types [list rmd160 sha256]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum_type_list $preferred_checksum_types]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpected results: no results returned"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $results {size}] ==  -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no mention of the missing size field"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_type_list_missing_recommended passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_type_list_missing_recommended passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_type_list_deprecated_md5 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we are warned about MD5 being a deprecated checksum type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set preferred_checksum_types [list md5]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum_type_list $preferred_checksum_types]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no results"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $results {deprecated.+md5}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        resturn "FAIL: expecting deprecation warning for using MD5 solely"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $results {missing.+recommended}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: expecting warnings about missing recommended checksum\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                types"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_type_list_deprecated_md5 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_type_list_deprecated_md5 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_type_list_deprecated_sha1 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we are warned about SHA1 being a deprecated checksum type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set preferred_checksum_types [list sha1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum_type_list $preferred_checksum_types]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpected results: no results returned"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $results {deprecated.+sha1}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no mention of the deprecated sha1 field"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $results {missing.+recommended}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: expecting warnings about missing recommended checksum\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                types"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_type_list_deprecated_sha1 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_type_list_deprecated_sha1 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_type_list_mixed {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we are warned about a missing recommended field when
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    multiple fields are specified
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set preferred_checksum_types [list md5 rmd160 sha256]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum_type_list $preferred_checksum_types]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpected results: no results returned"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $results {missing.+size}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no mention of missing recommended size field: $results"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_type_list_mixed passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_type_list_mixed passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_basic {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify linting the most basic checksum that is still valid
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "checksum size 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: errors unexpectedly encountered: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $warnings] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[lsearch -regexp $warnings {missing.+recommended}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return "FAIL: missing expected warning about recommended fields"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[llength [lsearch -inline \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              -regexp \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              -all $warnings {missing.+recommended}]] != 2} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return "FAIL: less warnings than expected: $warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_basic passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_basic passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_basic_w_filename {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify linting the most basic checksum that is still valid (with filename)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "checksum doop.tgz size 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: errors unexpectedly encountered: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $warnings] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[lsearch -regexp $warnings \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                {doop\.tgz.+missing.+recommended}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return "FAIL: missing expected warning about recommended fields"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[llength [lsearch -inline \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              -regexp \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              -all $warnings \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                              {doop\.tgz.+missing.+recommended}]] != 2} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return "FAIL: less warnings than expected: $warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_basic filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_basic filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_normal {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify linting the standard checksum returns no errors or warnings
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum sha256  3b413cdc29d91c91102628eb9b48e65a6827afe5441a46ad4d602e254945b24d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  rmd160  b7240735e8ca7ad7a263a4bb69935ad68b34a878
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  size    11242"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered errors: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $warnings] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered warnings: $warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_normal passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_normal passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_normal_w_filename {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify linting the standard checksum returns no errors or warnings (with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filename)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum somefile.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  sha256  3b413cdc29d91c91102628eb9b48e65a6827afe5441a46ad4d602e254945b24d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  rmd160  b7240735e8ca7ad7a263a4bb69935ad68b34a878
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  size    11242"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered errors: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $warnings] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered warnings: $warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_normal_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_normal_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_bad_checksum_type {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch invalid checksum types while linting checksums
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum sha256  ea0d7ca87aab70c12817df5893f6bfe0492ce63f6e0e63c0b452e375344c7ef7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  rmd160  f6a98b558f01e4c4fd078c106e6862436094fa3d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  sha300  thischecksumtypedoesnotexist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  size    11242"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {invalid.+sha300}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no error present about the invalid checksum type: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_bad_checksum_type passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_bad_checksum_type passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_bad_checksum_type_w_filename {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch invalid checksum types while linting checksums (with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    filename)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum somefile.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  sha256  ea0d7ca87aab70c12817df5893f6bfe0492ce63f6e0e63c0b452e375344c7ef7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  rmd160  57353feec9a4bb9d5192705ad0403422bbd33007
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  sha300  thischecksumtypedoesnotexist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  size    11242"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {invalid.+field}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no error present about the invalid checksum type: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_bad_checksum_type_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_bad_checksum_type_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_multi_basic {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify basic checksums for multiple files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum file1.tar size 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  file2.tar size 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  file3.tar size 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $results {file1\.tar.+recommended}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no expected warnings for file1: $results"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $results {file2\.tar.+recommended}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no expected warnings for file2: $results"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $results {file3\.tar.+recommended}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no expected warnings for file3: $results"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_multi_basic passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_multi_basic passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_multi_normal_w_filename {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify normal checksums for multiple files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum file1.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  3bb9d40e802e51f56f1364abc553758152131803c12d85ba6e14bad6813409d5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  880690684f35730351dac2cdfd928a7610f69cce
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    34554
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  file2.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  2f686816f2a80e3lfn23jknf23jknp8d27ce4205a61ee422d56f8c5e8b4609e4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  5aee5d12fe536e2e288e9f1daafd84f1bc17c3e6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    25644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  file3.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  250a86b79c231001c4ae71d2f66428092a4fbb2070971acafd471aa49739c9e4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  767d402a1a368f083c16a81ff31dde1870f451dc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    11242"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered errors: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $warnings] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered warnings: $warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_multi_normal_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_multi_normal_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_malformed_sha256 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch malformed SHA256 checksums
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "checksum sha256 thisisnotcorrect"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered errors: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {checksum.+sha256.+invalid}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing error about invalid checksum: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_malformed_sha256 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_malformed_sha256 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_malformed_rmd160 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch malformed RIPEMD160 checksums
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "checksum rmd160 thisisnotcorrect"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered errors: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {checksum.+rmd160.+invalid}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing error about invalid checksum: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_malformed_rmd160 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_malformed_rmd160 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_malformed_size {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch malformed size checksum fields
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "checksum size 1221A3"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered errors: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {checksum.+size.+invalid}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing error about invalid checksum: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_malformed_size passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_malformed_size passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_multi_malformed {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch malformed checksums after another checksum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "checksum  size   11213
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256 thisisnotcorrect"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered errors: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {checksum.+sha256.+invalid}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing error about invalid checksum: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_multi_malformed passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_multi_malformed passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_multi_malformed_w_filename_1 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch malformed checksums for multiple files (1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum "checksum  somefile.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size   11213
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256 thisisnotcorrect"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $warnings] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {somefile.+checksum.+sha256.+invalid}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing error about invalid checksum: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $warnings {missing.+recommended.+rmd160}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing expected warning about missing recommended type"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_multi_malformed_w_filename_1 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_multi_malformed_w_filename_1 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_multi_malformed_w_filename_2 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch malformed checksums for multiple files (2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum   somefile.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256 3bb9d40e802e51f56f1364abc553758152131803c12d85ba6e14bad6813409d5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        size   11213
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    somefile2.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256 thisiscompletelymalformed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        size   25433"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $warnings] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {somefile.+checksum.+sha256.+invalid}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing error about invalid checksum: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $warnings {somefile.+missing.+recommended.+rmd160}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing warnings about missing recommended type"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_multi_malformed_w_filename_2 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_multi_malformed_w_filename_2 passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_multi_adjacent_invalid_w_filename {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch adjacent invalid checksum fields within multiple files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum   somefile.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        sha256 3bb9d40e802e51f56f1364abc553758152131803c12d85ba6e14bad6813409d5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        size   11213
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    somefile2.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        nope thisiscompletelyincorrect
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        size   25433"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered errors: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {invalid.+field.+nope}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing error about invalid checksum field: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $warnings {somefile.+missing.+recommended.+rmd160}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing warnings about missing recommended type: rmd160"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_multi_adjacent_invalid_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_multi_adjacent_invalid_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_invalid_ending {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch checksums that end with an invalid field
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum rmd160 880690684f35730351dac2cdfd928a7610f69cce bunny"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $warnings] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {invalid.+field.+bunny}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing error about invalid checksum field: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $warnings {missing.+recommended}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no warnings about missing recommended types: $warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_invalid_ending passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_invalid_ending passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test test_lint_checksum_invalid_ending_w_filename {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Verify that we catch checksums that end with an invalid field
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set checksum \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "checksum file1.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160 880690684f35730351dac2cdfd928a7610f69cce
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  bunny"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set results [portlint::lint_checksum $checksum]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $results] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: invalid results returned: empty list"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set errors [lindex $results 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set warnings [lindex $results 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $errors] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength $warnings] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: unexpectedly encountered no warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $errors {invalid.+bunny}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: missing error about invalid field: $errors"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[lsearch -regexp $warnings {file1.+missing.+recommended}] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "FAIL: no warnings about missing recommended types: $warnings"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "lint_checksum_invalid_ending_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} -result "lint_checksum_invalid_ending_w_filename passed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cleanupTests
</span></pre><pre style='margin:0'>

</pre>