about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <andersrb@gmail.com>2011-04-26 20:49:03 -0400
committerBrian Anderson <andersrb@gmail.com>2011-04-26 20:49:03 -0400
commit8216b5fc10e7c7b0d4e9f40bb4f9fdaaaebf9400 (patch)
treeb7dddff0dda11e1eae672740185f8431952b317b /src
parent2e12fbfc06abdf1547528047b1438204ca4121a1 (diff)
downloadrust-8216b5fc10e7c7b0d4e9f40bb4f9fdaaaebf9400.tar.gz
rust-8216b5fc10e7c7b0d4e9f40bb4f9fdaaaebf9400.zip
Fix the interaction between various flags in #fmt
Diffstat (limited to 'src')
-rw-r--r--src/lib/ExtFmt.rs19
-rw-r--r--src/test/run-pass/syntax-extension-fmt.rs19
2 files changed, 29 insertions, 9 deletions
diff --git a/src/lib/ExtFmt.rs b/src/lib/ExtFmt.rs
index a9747c6a748..c71e49a39b2 100644
--- a/src/lib/ExtFmt.rs
+++ b/src/lib/ExtFmt.rs
@@ -532,15 +532,20 @@ mod RT {
         // instead.
         if (signed
             && zero_padding
-            && _str.byte_len(s) > 0u
-            && s.(0) == '-' as u8) {
+            && _str.byte_len(s) > 0u) {
 
-            auto bytelen = _str.byte_len(s);
-            auto numpart = _str.substr(s, 1u, bytelen - 1u);
-            ret "-" + padstr + numpart;
-        } else {
-            ret padstr + s;
+            auto head = s.(0);
+            if (head == '+' as u8
+                || head == '-' as u8
+                || head == ' ' as u8) {
+
+                auto headstr = _str.unsafe_from_bytes(vec(head));
+                auto bytelen = _str.byte_len(s);
+                auto numpart = _str.substr(s, 1u, bytelen - 1u);
+                ret headstr + padstr + numpart;
+            }
         }
+        ret padstr + s;
     }
 
     fn have_flag(vec[flag] flags, flag f) -> bool {
diff --git a/src/test/run-pass/syntax-extension-fmt.rs b/src/test/run-pass/syntax-extension-fmt.rs
index 46b529d5847..82b3e658a63 100644
--- a/src/test/run-pass/syntax-extension-fmt.rs
+++ b/src/test/run-pass/syntax-extension-fmt.rs
@@ -175,6 +175,21 @@ fn main() {
   test(#fmt("%06.5X", 127u), " 0007F");
   test(#fmt("%06.5o", 10u), " 00012");
 
-  // TODO: Padding and +
-  // TODO: Padding and ' '
+  // Signed combinations
+  test(#fmt("% 5d", 1), "    1");
+  test(#fmt("% 5d", -1), "   -1");
+  test(#fmt("%+5d", 1), "   +1");
+  test(#fmt("%+5d", -1), "   -1");
+  test(#fmt("% 05d", 1), " 0001");
+  test(#fmt("% 05d", -1), "-0001");
+  test(#fmt("%+05d", 1), "+0001");
+  test(#fmt("%+05d", -1), "-0001");
+  test(#fmt("%- 5d", 1), " 1   ");
+  test(#fmt("%- 5d", -1), "-1   ");
+  test(#fmt("%-+5d", 1), "+1   ");
+  test(#fmt("%-+5d", -1), "-1   ");
+  test(#fmt("%- 05d", 1), " 1   ");
+  test(#fmt("%- 05d", -1), "-1   ");
+  test(#fmt("%-+05d", 1), "+1   ");
+  test(#fmt("%-+05d", -1), "-1   ");
 }