Add test for basename, fix issue where suffix is wrongfully applied if it appears in the middle of the filename
diff --git a/scripts/test/basename.test b/scripts/test/basename.test
new file mode 100755
index 0000000..e0288ce
--- /dev/null
+++ b/scripts/test/basename.test
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+[ -f testing.sh ] && . testing.sh
+
+#testing "name" "command" "result" "infile" "stdin"
+
+# Removal of extra /'s
+testing "basename /-only" "basename ///////" "/\n" "" ""
+testing "basename trailing /" "basename a//////" "a\n" "" ""
+testing "basename combined" "basename /////a///b///c///d/////" "d\n" "" "" 
+
+# Standard suffix behavior.
+testing "basename suffix" "basename a/b/c/d.suffix .suffix" "d\n" "" ""
+
+# A suffix cannot be the entire result.
+testing "basename suffix=result" "basename .txt .txt" ".txt\n" "" ""
+
+# Deal with suffix appearing in the filename
+testing "basename reappering suffix 1" "basename a.txt.txt .txt" "a.txt\n" "" ""
+testing "basename reappering suffix 2" "basename a.txt.old .txt" "a.txt.old\n" "" ""
+
+# A suffix should be a real suffix, only a the end.
+testing "basename invalid suffix" "basename isthisasuffix? suffix" "isthisasuffix?\n" "" ""
\ No newline at end of file
diff --git a/toys/basename.c b/toys/basename.c
index ef57103..a6a3bb9 100644
--- a/toys/basename.c
+++ b/toys/basename.c
@@ -15,7 +15,7 @@
 	help
         usage: basename string [suffix]
 
-        Return non-directory portion of a pathname
+        Return non-directory portion of a pathname removing suffix
 */
 
 #include "toys.h"
@@ -37,9 +37,11 @@
     
     // chop off the suffix if provided
     if (suffix) {
-        char *s = strstr(base, suffix);
-        if (s && s != base) *s = 0;
+        int suflen = strlen(suffix);
+        int reslen = strlen(base);
+        if (suflen < reslen && !strcmp( base+reslen-suflen, suffix))
+            base[reslen-suflen] = 0;
     }
-
+ 
     puts(base);
 }