View | Details | Raw Unified | Return to bug 65644
Collapse All | Expand All

(-)src/java/org/apache/poi/ss/format/CellFormatPart.java (-1 / +4 lines)
Lines 108-114 Link Here
108
                "  \\s*([0-9]+(?:\\.[0-9]*)?)\\s*  # The constant to test against\n";
108
                "  \\s*([0-9]+(?:\\.[0-9]*)?)\\s*  # The constant to test against\n";
109
        
109
        
110
        // A currency symbol / string, in a specific locale
110
        // A currency symbol / string, in a specific locale
111
        String currency = "(\\[\\$.{0,3}-[0-9a-f]{3}\\])";
111
        String currency = "(\\[\\$.{0,3}(-[0-9a-f]{3,4})?\\])";
112
112
113
        String color =
113
        String color =
114
                "\\[(black|blue|cyan|green|magenta|red|white|yellow|color [0-9]+)\\]";
114
                "\\[(black|blue|cyan|green|magenta|red|white|yellow|color [0-9]+)\\]";
Lines 306-311 Link Here
306
            if (currencyPart.startsWith("[$-")) {
306
            if (currencyPart.startsWith("[$-")) {
307
                // Default $ in a different locale
307
                // Default $ in a different locale
308
                currencyRepl = "$";
308
                currencyRepl = "$";
309
            } else if (!currencyPart.contains("-")) {
310
                // Accounting formats such as USD [$USD]
311
                currencyRepl = currencyPart.substring(2, currencyPart.indexOf("]"));
309
            } else {
312
            } else {
310
                currencyRepl = currencyPart.substring(2, currencyPart.lastIndexOf('-'));
313
                currencyRepl = currencyPart.substring(2, currencyPart.lastIndexOf('-'));
311
            }
314
            }
(-)src/testcases/org/apache/poi/ss/format/TestCellFormat.java (-5 / +19 lines)
Lines 932-944 Link Here
932
        String formatUK  = "_-[$"+pound+"-809]* #,##0_-;\\-[$"+pound+"-809]* #,##0_-;_-[$"+pound+"-809]* \"-\"??_-;_-@_-";
932
        String formatUK  = "_-[$"+pound+"-809]* #,##0_-;\\-[$"+pound+"-809]* #,##0_-;_-[$"+pound+"-809]* \"-\"??_-;_-@_-";
933
        // French style accounting, euro sign comes after not before
933
        // French style accounting, euro sign comes after not before
934
        String formatFR  = "_-#,##0* [$"+euro+"-40C]_-;\\-#,##0* [$"+euro+"-40C]_-;_-\"-\"??* [$"+euro+"-40C] _-;_-@_-";
934
        String formatFR  = "_-#,##0* [$"+euro+"-40C]_-;\\-#,##0* [$"+euro+"-40C]_-;_-\"-\"??* [$"+euro+"-40C] _-;_-@_-";
935
        
935
        // R English (South Africa) style accounting, R currency symbol and 4-digit locale specifier
936
        String formatSA = "_-[$R-1C09]* #,##0_-;\\-[$R-1C09]* #,##0_-;_-[$R-1C09]* \"-\"??_-;_-@_-";
937
        // USD style accounting, USD currency symbol without -xxx or -xxxx locale specifier
938
        String formatUSD = "_([$USD]\\ * #,##0_);_([$USD]\\ * \\(#,##0\\);_([$USD]\\ * \"-\"??_);_(@_)";
939
936
        // Has +ve, -ve and zero rules
940
        // Has +ve, -ve and zero rules
937
        CellFormat cfDft = CellFormat.getInstance(formatDft);
941
        CellFormat cfDft = CellFormat.getInstance(formatDft);
938
        CellFormat cfUS  = CellFormat.getInstance(formatUS);
942
        CellFormat cfUS  = CellFormat.getInstance(formatUS);
939
        CellFormat cfUK  = CellFormat.getInstance(formatUK);
943
        CellFormat cfUK  = CellFormat.getInstance(formatUK);
940
        CellFormat cfFR  = CellFormat.getInstance(formatFR);
944
        CellFormat cfFR  = CellFormat.getInstance(formatFR);
941
        
945
        CellFormat cfSA   = CellFormat.getInstance(formatSA);
946
        CellFormat cfUSD   = CellFormat.getInstance(formatUSD);
947
942
        // For +ve numbers, should be Space + currency symbol + spaces + whole number with commas + space
948
        // For +ve numbers, should be Space + currency symbol + spaces + whole number with commas + space
943
        // (Except French, which is mostly reversed...)
949
        // (Except French, which is mostly reversed...)
944
        assertEquals(" $   12 ", cfDft.apply(Double.valueOf(12.33)).text);
950
        assertEquals(" $   12 ", cfDft.apply(Double.valueOf(12.33)).text);
Lines 945-967 Link Here
945
        assertEquals(" $   12 ",  cfUS.apply(Double.valueOf(12.33)).text);
951
        assertEquals(" $   12 ",  cfUS.apply(Double.valueOf(12.33)).text);
946
        assertEquals(" "+pound+"   12 ", cfUK.apply(Double.valueOf(12.33)).text);
952
        assertEquals(" "+pound+"   12 ", cfUK.apply(Double.valueOf(12.33)).text);
947
        assertEquals(" 12   "+euro+" ", cfFR.apply(Double.valueOf(12.33)).text);
953
        assertEquals(" 12   "+euro+" ", cfFR.apply(Double.valueOf(12.33)).text);
954
        assertEquals(" R   12 ", cfSA.apply(Double.valueOf(12.33)).text);
955
        assertEquals(" USD    12 ", cfUSD.apply(Double.valueOf(12.33)).text);
948
        
956
        
949
        assertEquals(" $   16,789 ", cfDft.apply(Double.valueOf(16789.2)).text);
957
        assertEquals(" $   16,789 ", cfDft.apply(Double.valueOf(16789.2)).text);
950
        assertEquals(" $   16,789 ",  cfUS.apply(Double.valueOf(16789.2)).text);
958
        assertEquals(" $   16,789 ",  cfUS.apply(Double.valueOf(16789.2)).text);
951
        assertEquals(" "+pound+"   16,789 ", cfUK.apply(Double.valueOf(16789.2)).text);
959
        assertEquals(" "+pound+"   16,789 ", cfUK.apply(Double.valueOf(16789.2)).text);
952
        assertEquals(" 16,789   "+euro+" ", cfFR.apply(Double.valueOf(16789.2)).text);
960
        assertEquals(" 16,789   "+euro+" ", cfFR.apply(Double.valueOf(16789.2)).text);
953
        
961
        assertEquals(" R   16,789 ", cfSA.apply(Double.valueOf(16789.2)).text);
962
        assertEquals(" USD    16,789 ", cfUSD.apply(Double.valueOf(16789.2)).text);
963
954
        // For -ve numbers, gets a bit more complicated...
964
        // For -ve numbers, gets a bit more complicated...
955
        assertEquals("-$   12 ", cfDft.apply(Double.valueOf(-12.33)).text);
965
        assertEquals("-$   12 ", cfDft.apply(Double.valueOf(-12.33)).text);
956
        assertEquals(" $   -12 ",  cfUS.apply(Double.valueOf(-12.33)).text);
966
        assertEquals(" $   -12 ",  cfUS.apply(Double.valueOf(-12.33)).text);
957
        assertEquals("-"+pound+"   12 ", cfUK.apply(Double.valueOf(-12.33)).text);
967
        assertEquals("-"+pound+"   12 ", cfUK.apply(Double.valueOf(-12.33)).text);
958
        assertEquals("-12   "+euro+" ", cfFR.apply(Double.valueOf(-12.33)).text);
968
        assertEquals("-12   "+euro+" ", cfFR.apply(Double.valueOf(-12.33)).text);
959
        
969
        assertEquals("-R   12 ", cfSA.apply(Double.valueOf(-12.33)).text);
970
        assertEquals(" USD    (12)", cfUSD.apply(Double.valueOf(-12.33)).text);
971
960
        assertEquals("-$   16,789 ", cfDft.apply(Double.valueOf(-16789.2)).text);
972
        assertEquals("-$   16,789 ", cfDft.apply(Double.valueOf(-16789.2)).text);
961
        assertEquals(" $   -16,789 ",  cfUS.apply(Double.valueOf(-16789.2)).text);
973
        assertEquals(" $   -16,789 ",  cfUS.apply(Double.valueOf(-16789.2)).text);
962
        assertEquals("-"+pound+"   16,789 ", cfUK.apply(Double.valueOf(-16789.2)).text);
974
        assertEquals("-"+pound+"   16,789 ", cfUK.apply(Double.valueOf(-16789.2)).text);
963
        assertEquals("-16,789   "+euro+" ", cfFR.apply(Double.valueOf(-16789.2)).text);
975
        assertEquals("-16,789   "+euro+" ", cfFR.apply(Double.valueOf(-16789.2)).text);
964
        
976
        assertEquals("-R   16,789 ", cfSA.apply(Double.valueOf(-16789.2)).text);
977
        assertEquals(" USD    (16,789)", cfUSD.apply(Double.valueOf(-16789.2)).text);
978
965
        // For zero, should be Space + currency symbol + spaces + Minus + spaces
979
        // For zero, should be Space + currency symbol + spaces + Minus + spaces
966
        assertEquals(" $   - ", cfDft.apply(Double.valueOf(0)).text);
980
        assertEquals(" $   - ", cfDft.apply(Double.valueOf(0)).text);
967
        // TODO Fix the exception this incorrectly triggers
981
        // TODO Fix the exception this incorrectly triggers

Return to bug 65644