Ejemplo n.º 1
0
def test_default_width():
    ssfw = SSF(default_width=2)
    assert ssfw.format('0', 1) == ' 1'
    assert ssfw.format('@', 1) == '1 '
    assert ssfw.format('General', 1) == ' 1'
    assert ssfw.format('General', 'a') == 'a '
    assert ssfw.format('General', 123) == '##'
Ejemplo n.º 2
0
def test_alternate_calendars_4():
    ssff = SSF(locale='fr-FR', errors='raise')

    # Chinese Lunar 13
    # Non leap year:
    assert ssff.format('[$-137C92]yyyy-mm-dd', 43840) == '2019-12-16'
    assert ssff.format('[$-137C92]yyyy-mm-dd', 43869) == '2020-01-15'
    # Leap year:
    assert ssff.format('[$-137C92]yyyy-mm-dd', 44190) == '2020-12-11'
    assert ssff.format('[$-137C92]yyyy-mm-dd', 44219) == '2020-13-11'

    # UM_AL_QURA 17
    assert ssff.format('[$-171809]dddd mmmm d, yyyy',
                       43836) == 'AlEthnien Jamada El Oula 11, 1441'
Ejemplo n.º 3
0
def test_general_dates():
#    assert.equal(SSF.format("General", new Date(2017, 1, 19)), "2/19/17");
    assert ssf.format("General", date(2017, 2, 19)) == "2/19/2017"      # https://github.com/SheetJS/ssf/issues/55
#    assert.equal(SSF.format("General", new Date(2017, 1, 19), {date1904:true}), "2/19/17");
    ssf1904 = SSF(date1904=True)
    assert ssf1904.format("General", date(2017, 2, 19)) == "2/19/2017"      # https://github.com/SheetJS/ssf/issues/55
#    assert.equal(SSF.format("General", new Date(1901, 0, 1)), "1/1/01");
    assert ssf.format("General", date(1901, 1, 1)) == "1/1/1901"
#    if(SSF.format("General", new Date(1901, 0, 1), {date1904:true}) == "1/1/01") throw new Error("date1904 invalid date");
    assert ssf1904.format("General", date(1901, 1, 1)) == '##########'
#    assert.equal(SSF.format("General", new Date(1904, 0, 1)), "1/1/04");
    assert ssf.format("General", date(1904, 1, 1)) == "1/1/1904"
#    assert.equal(SSF.format("General", new Date(1904, 0, 1), {date1904:true}), "1/1/04");
    assert ssf1904.format("General", date(1904, 1, 1)) == "1/1/1904"
Ejemplo n.º 4
0
def test_bad_locale():
    try:
        ssf = SSF(locale='oops', errors='raise')
        assert False
    except ValueError as e:
        assert str(e) == 'Locale oops not found!'

    ssf = SSF(locale='oops', errors='pounds')
    assert ssf.format('0', 1, width=1) == '#'

    ssf = SSF(locale='oops', errors='ignore')
    assert ssf.format('0', 1) == '1'
    assert ssf.format(14, '1/02/2020') == '1/2/2020'
Ejemplo n.º 5
0
def test_bad_date_formats():
    #    var bad = [];
    bad = [
        'hhh', 'HHH', 'hhmmm', 'hhMMM', 'sss', 'ss.0000', '[hm]', '[ms]',
        '[sm]', '[sh]', '[hs]'
    ]
    #    var chk = function(fmt){ return function(){ SSF.format(fmt,0); }; };
    ssfi = SSF(errors='ignore')
    ssfe = SSF(errors='raise')

    def chk(fmt):
        ssfi.format(fmt, 0)  # Error should be ignored
        try:
            #print(f'ssf.format({fmt}, 0)')
            ssfe.format(fmt, 0)
            return False
        except Exception:
            return True

    for fmt in bad:
        assert chk(fmt)
Ejemplo n.º 6
0
def test_issue_69():
    ssfe = SSF(errors='raise')
    try:
        ssf.format('HH[MM]', 0)
        assert False
    except Exception:
        pass
    try:
        ssf.format('HH[M]', 0)
        assert False
    except Exception:
        pass
Ejemplo n.º 7
0
def test_should_override():
    #    assert.equal(SSF.format('m/d/yy', 43880), "2/19/20");
    assert ssf.format('m/d/yyyy', 43880) == "2/19/2020"
    #    assert.equal(SSF.format('m/d/yy', 43880, {dateNF:"yyyy-mm-dd"}), "2020-02-19");
    ssfNF = SSF(dateNF="yyyy-mm-dd")
    assert ssfNF.format('m/d/yyyy', 43880) == "2020-02-19"
    #    assert.equal(SSF.format('m/d/yy', 43880, {dateNF:"dd/mm/yyyy"}), "19/02/2020");
    ssfNF = SSF(dateNF="dd/mm/yyyy")
    assert ssfNF.format('m/d/yyyy', 43880) == "19/02/2020"
Ejemplo n.º 8
0
def test_dateNF():
    #  it('should override format code 14', function() {
    #    assert.equal(SSF.format(14, 43880), "2/19/20");
    assert ssf.format(
        14, 43880) == "2/19/2020"  # Note format 14 now uses a 4-digit year
    #    assert.equal(SSF.format(14, 43880, {dateNF:"yyyy-mm-dd"}), "2020-02-19");
    ssfNF = SSF(dateNF="yyyy-mm-dd")
    assert ssfNF.format(14, 43880) == "2020-02-19"
    #    assert.equal(SSF.format(14, 43880, {dateNF:"dd/mm/yyyy"}), "19/02/2020");
    ssfNF = SSF(dateNF="dd/mm/yyyy")
    assert ssfNF.format(14, 43880) == "19/02/2020"
Ejemplo n.º 9
0
def test_issue_11():
    ssfc = SSF(color_pre='<color name="{}" rgb="#{rgb}">',
               color_post='</color {}>')
    assert ssfc.format('0', 0) == '0'
    assert ssfc.format('[Red]0',
                       0) == '<color name="Red" rgb="#FF0000">0</color Red>'
    assert ssfc.format(
        '[Color2]0',
        0) == '<color name="Color2" rgb="#FFFFFF">0</color Color2>'
    assert ssfc.format(
        '[Color 2]0',
        0) == '<color name="Color2" rgb="#FFFFFF">0</color Color2>'
Ejemplo n.º 10
0
def test_issue_13(monkeypatch):
    import locale

    real_setlocale = locale.setlocale

    def mock_setlocale(typ, locale):
        assert False  # Shouldn't come here!

    monkeypatch.setattr(locale, 'setlocale', mock_setlocale)
    try:
        ssfu = SSF(locale='nl')
        assert ssfu.format('Currency', 1.98) == '\u20AC 1,98'
        ssfi = SSF(locale='is')
        assert ssfi.format('Accounting', 12.98) == ' 13 kr'
        assert ssfu.format('#,###.00', 1234.56, locale='de-DE') == '1.234,56'
    finally:
        monkeypatch.setattr(locale, 'setlocale', real_setlocale)
Ejemplo n.º 11
0
def test_issue_10(monkeypatch):
    import locale

    try:  # v0.2.2
        locale.setlocale(locale.LC_ALL,
                         'en-US')  # This raises locale.Error on linux
        locale.setlocale(locale.LC_ALL, '')
    except locale.Error:
        return  # Only do this test on Windoze!!

    real_setlocale = locale.setlocale

    def mock_setlocale(typ, locale):
        """Act like the Unix version of setlocale - don't accept
        any 2-letter locales and don't accept any '-'"""
        #print(f'mock_setlocale({typ}, {locale})')
        if not locale:
            return locale
        if len(locale) == 2 or '-' in locale:
            raise ValueError("Bad Linux Locale")
        if locale == 'dutch':
            real_setlocale(typ, 'nl')
        elif locale == 'icelandic':
            real_setlocale(typ, 'is')
        elif locale == 'de_DE':
            real_setlocale(typ, 'de-DE')
        return locale

    monkeypatch.setattr(locale, 'setlocale', mock_setlocale)
    try:
        ssfu = SSF(locale='nl')
        assert ssfu.format('Currency', 1.98) == '\u20AC 1,98'
        ssfi = SSF(locale='is')
        assert ssfi.format('Accounting', 12.98) == ' 13 kr'
        assert ssfu.format('#,###.00', 1234.56, locale='de-DE') == '1.234,56'
    finally:
        monkeypatch.setattr(locale, 'setlocale', real_setlocale)
Ejemplo n.º 12
0
# Test that we fixed all the issues reported for ssf.js
# See https://github.com/SheetJS/ssf/issues

from ssf import SSF

ssf = SSF()


def test_issue_8():  # International support
    assert ssf.format('#,###.00', 1000000, locale='de-DE') == '1.000.000,00'
    assert ssf.format('#,###.00', 1000000,
                      locale='fr-FR') == '1\u202f000\u202f000,00'
    assert ssf.format('#,###.00', 1000000, locale='hi_IN') == '10,00,000.00'


def test_issue_11():
    ssfc = SSF(color_pre='<color name="{}" rgb="#{rgb}">',
               color_post='</color {}>')
    assert ssfc.format('0', 0) == '0'
    assert ssfc.format('[Red]0',
                       0) == '<color name="Red" rgb="#FF0000">0</color Red>'
    assert ssfc.format(
        '[Color2]0',
        0) == '<color name="Color2" rgb="#FFFFFF">0</color Color2>'
    assert ssfc.format(
        '[Color 2]0',
        0) == '<color name="Color2" rgb="#FFFFFF">0</color Color2>'


def test_issue_12():
    assert ssf.format('#,###.??;(#,###.??);0', 1234.1) == '1,234.1 '
Ejemplo n.º 13
0
def test_alternate_calendars_3():
    ssff = SSF(locale='fr-FR', errors='raise')

    # Lunar 0E

    # Non leap year:
    assert ssff.format('[$-E0009]dddd,ddd,mmmm,mmm,mmmmm,m/d/yyyy',
                       43659) == '土曜日,土,六月,六月,六,6/11/2019'
    assert ssff.format('[$-E0001]dddd,ddd,mmmm,mmm,mmmmm,m',
                       43840) == 'Friday,Fri,December,Dec,D,12'
    assert ssff.format('[$-E0001]dddd,ddd,mmmm,mmm,mmmmm,m',
                       43869) == 'Saturday,Sat,January,Jan,J,1'
    assert ssff.format('[$-1B0E0411]dddd mmmm d, yyyy',
                       43659) == '土曜日 六月 十一, 二〇一九'
    # Leap year:
    assert ssff.format('[$-E0009]dddd mmm dd, yyyy',
                       43856) == '日曜日 正月 02, 2020'
    assert ssff.format('[$-1E0E0404]dddd,ddd,mmmm,mmm,mmmmm,m-d-yyyy',
                       44190) == '金曜日,金,十二月,十二月,十,十二-十一-二○二○'  #12th month
    assert ssff.format('[$-1E0E0404]dddd,ddd,mmmm,mmm,mmmmm,m-d-yyyy',
                       44219) == '土曜日,土,十二月,十二月,十,十三-十一-二○二○'  #13th month

    # Lunar 11

    # Non leap year:
    assert ssff.format('[$-110001]ddd mmm d yyyy', 43840) == 'Fri Dec 16 2019'
    assert ssff.format('[$-110001]ddd mmm d yyyy', 43869) == 'Sat Jan 15 2020'
    # Leap year:
    assert ssff.format('[$-11FC23]mm-dd-yyyy', 44190) == '12-11-2020'
    assert ssff.format('[$-11FC23]mm-dd-yyyy', 44219) == '13-11-2020'

    # Lunar 12

    # Non leap year:
    assert ssff.format('[$-120010]yyyy-mm-dd', 43840) == '2019-12-16'
    assert ssff.format('[$-120010]yyyy-mm-dd', 43869) == '2020-01-15'
    # Leap year:
    assert ssff.format('[$-1E127804]yyyy mm dd',
                       44190) == '二○二○ 十二 十一'  #12th month
    assert ssff.format('[$-1E127804]yyyy mm dd',
                       44219) == '二○二○ 十三 十一'  #13th month
Ejemplo n.º 14
0
def test_alternate_calendars_2():
    ssff = SSF(locale='fr-FR', errors='raise')

    # Thai Buddhist - 07

    assert ssff.format('[$-7000C]dddd mmmm d, yyyy',
                       44169) == 'ศุกร์ ธันวาคม 4, 2563'
    assert ssff.format('[$-0D07000C]dddd mmmm d, yyyy',
                       44169) == 'ศุกร์ ธันวาคม ๔, ๒๕๖๓'
    assert ssff.format('[$-0D07000C]dddd mmmm d, yyyy',
                       44200) == 'จันทร์ มกราคม ๔, ๒๕๖๔'

    # Jewish - 08 and 08_leap

    # Non leap year:
    assert ssff.format('[$-80009]dddd mmm d, yyyy',
                       43836) == 'Yom Sheni Tevet 9, 5780'
    assert ssff.format('[$-24080012]dddd mmm d, yyyy',
                       43894) == "Yom Revi'i Adar 八, 五七八0"
    assert ssff.format('[$-8000D]dddd,ddd,mmmm,mmm,mmmmm,m d yy',
                       43865) == 'יום שלישי,ג,שבט,שבט,שבט,5 9 80'
    assert ssff.format('[$-80402]dddd mmmm d, yyyy',
                       43923) == 'Yom Chamishi Nisan 8, 5780'
    assert ssff.format('[$-8008C]dddd mmm d, yyyy',
                       44111) == "Yom Revi'i Tishrei 19, 5781"
    # Leap year:
    assert ssff.format('[$-8000D]dddd mmmm d, yyyy',
                       44571) == 'יום שני שבט 8, 5782'
    assert ssff.format('[$-8000C]dddd mmmm d, yyyy',
                       44600) == 'Yom Shlishi AdarI 7, 5782'  # Leap month
    assert ssff.format('[$-8000C]dddd mmmm m/d/yy',
                       44629) == "Yom Revi'i AdarII 7/6/82"
    assert ssff.format('[$-8000A]dddd mmm mm/dd/yyyy',
                       44817) == 'Yom Shlishi Elul 13/17/5782'  # 13th month
    assert ssff.format(
        '[$-82C09]dddd mmmm yyyy-mm-dd',
        44846) == "Yom Revi'i Tishrei 5783-01-17"  # Wrap-around to month 1

    # Gregorian French - 09
    assert ssff.format('[$-90409]dddd mmmm d, yyyy',
                       43865) == 'mardi février 4, 2020'

    # Gregorian Arabic - 0A
    assert ssff.format('[$-A000C]dddd mmmm yyyy-mm-dd',
                       43836) == 'الإثنين كانون الثاني 2020-01-06'
    assert ssff.format('[$-AFC23]dddd,ddd,mmmm,mmm,mmmmm,m',
                       44169) == 'الجمعة,الجمعة,كانون الأول,كانون الأول,ك,12'

    # Gregorian Transliterated English - 0B

    assert ssff.format('[$-B0009]dddd mmmm d, yyyy',
                       43836) == 'الإثنين يناير 6, 2020'

    # Gregorian Transliterated French - 0C

    assert ssff.format('[$-240C0012]dddd,ddd,mmmm,mmm,mmmmm,m-d-yyyy',
                       43952) == 'الجمعة,الجمعة,مايو,مايو,م,五-一-二0二0'
Ejemplo n.º 15
0
def test_alternate_calendars_1():
    ssff = SSF(locale='fr-FR', errors='raise')

    # Gregorian Calendar - United States - 02: Everything's in English
    assert ssff.format('[$-2040c]dddd mmmm d, yyyy',
                       43836) == 'Monday January 6, 2020'

    # Japanese (era) calendar 03
    assert ssff.format('[$-30091]dddd mmmm d, yyyy ge',
                       43836) == 'Monday January 6, 2 R2'
    assert ssff.format('[$-30091]g gg ggg e', 43865) == 'R 令 令和 2'
    assert ssff.format('[$-30091]b2g gg ggg e', 43865) == 'R 令 令和 2'

    # Taiwan Calendar 04
    assert ssff.format('[$-40001]ddd mmm d, yyyy', 43923) == 'Thu Apr 2, 2020'
    assert ssff.format('[$-4040C]dddd mmm d, yyyy', 43894) == '星期三 三月 4, 2020'

    # Korean Calendar 05
    assert ssff.format('[$-24050012]dddd mmm d, yyyy',
                       43952) == '금요일 5 一, 四三五三'
    assert ssff.format('[$-50009]m/d/yyyy', 43836) == '1/6/4353'

    # Hijri - Arab Lunar Calendar 06
    assert ssff.format('[$-60009]dddd,ddd,mmmm,mmm,mmmmm,m',
                       43894) == "AlArbia'a,AlArbia'a,Rajab,Rajab,R,7"
    assert ssff.format('[$-60402]dddd,ddd,mmmm,mmm,mmmmm,m',
                       43952) == 'AlJumaa,AlJumaa,Ramadan,Ramadan,R,9'
    assert ssff.format(
        '[$-6040C]dddd mmm d, yyyy', 44053
    ) == 'lundi Zoul Hijjah 20, 1441'  # Excel gives 21 for this one, but all online converters give 20!
Ejemplo n.º 16
0
#/* vim: set ts=2: */
#/*jshint loopfunc:true, mocha:true, node:true */
#/*eslint-env mocha, node */
#var SSF = require('../');

from ssf import SSF
ssf = SSF()

#var assert = require('assert');

#/* {format, data:[[value, result]]} */
#var data = [
data = [{
    'format':
    '"$"#,##0_);\\("$"#,##0\\);"-"',
    'data': [[10000, "$10,000 "], [9000.98, "$9,001 "], [100, "$100 "],
             [50.02, "$50 "], [1, "$1 "], [0.1, "$0 "], [0.01, "$0 "],
             [0, "-"], [-10000, "($10,000)"], [-9000.98, "($9,001)"],
             [-100, "($100)"], [-50.02, "($50)"], [-1, "($1)"], [-0.1, "($0)"],
             [-0.01, "($0)"]]
}, {
    'format': '(#,##0.00)',
    'data': [[-12345.6789, "-(12,345.68)"]]
}, {
    'format': '#,##0.00;\\(#,##0.00\\)',
    'data': [[-12345.6789, "(12,345.68)"]]
}, {
    'format': '[<=9999999]###\\-####;(###) ###\\-####',
    'data': [[2813308004, '(281) 330-8004']]
}
        #];
Ejemplo n.º 17
0
from ssf import SSF
ssf = SSF(errors='raise')

def test_get_set_days():
    dn = ssf.get_day_names()
    assert isinstance(dn, tuple)
    assert dn == (('Mon', 'Monday'),
            ('Tue', 'Tuesday'),
            ('Wed', 'Wednesday'),
            ('Thu', 'Thursday'),
            ('Fri', 'Friday'),
            ('Sat', 'Saturday'),
            ('Sun', 'Sunday'))

    ssf.set_day_names([['MO', 'MON'],
        ('TU', 'TUE'), ['WE', 'WED'],
        ('TH', 'THU'), ['FR', 'FRI'],
        ('SA', 'SAT'), ['SU', 'SUN']])

    assert ssf.format('ddd dddd', '10/3/2020') == 'SA SAT'
    assert ssf.format('ddd dddd', '10/4/2020') == 'SU SUN'
    assert ssf.format('ddd dddd', '10/5/2020') == 'MO MON'
    assert ssf.format('ddd dddd', '10/6/2020') == 'TU TUE'
    assert ssf.format('ddd dddd', '10/7/2020') == 'WE WED'
    assert ssf.format('ddd dddd', '10/8/2020') == 'TH THU'
    assert ssf.format('ddd dddd', '10/9/2020') == 'FR FRI'

    try:
        ssf.set_day_names(2)
        assert False        # Failed
    except ValueError:
Ejemplo n.º 18
0
from ssf import SSF
pre = '<font color="{}"><span style="color:#{rgb}>'
post = '</span></font>'
ssf = SSF(color_pre=pre, color_post=post)


def test_colors():
    data = [26, -26, 0, 'a']
    colors_expected = {"[GREEN]#,###": [f'{pre.format("Green", rgb="00FF00")}26{post}',
                                        f'{pre.format("Green", rgb="00FF00")}-26{post}',
                                        f'{pre.format("Green", rgb="00FF00")}{post}',
                                        'a'],
                        "[Green]#,###": [f'{pre.format("Green", rgb="00FF00")}26{post}',
                                        f'{pre.format("Green", rgb="00FF00")}-26{post}',
                                        f'{pre.format("Green", rgb="00FF00")}{post}',
                                        'a'],
                        "[MAGENTA]0.00": [f'{pre.format("Magenta", rgb="FF00FF")}26.00{post}',
                                        f'{pre.format("Magenta", rgb="FF00FF")}-26.00{post}',
                                        f'{pre.format("Magenta", rgb="FF00FF")}0.00{post}',
                                        'a'],
                        "[Magenta]0.00": [f'{pre.format("Magenta", rgb="FF00FF")}26.00{post}',
                                        f'{pre.format("Magenta", rgb="FF00FF")}-26.00{post}',
                                        f'{pre.format("Magenta", rgb="FF00FF")}0.00{post}',
                                        'a'],
                        "[RED]#.##": [f'{pre.format("Red", rgb="FF0000")}26.{post}',
                                        f'{pre.format("Red", rgb="FF0000")}-26.{post}',
                                        f'{pre.format("Red", rgb="FF0000")}.{post}',
                                        'a'],
                        "[Red]#.##": [f'{pre.format("Red", rgb="FF0000")}26.{post}',
                                        f'{pre.format("Red", rgb="FF0000")}-26.{post}',
                                        f'{pre.format("Red", rgb="FF0000")}.{post}',
Ejemplo n.º 19
0
from ssf import SSF

ssf = SSF(locale='en-US')


def test_get_format_general():
    assert ssf.get_format() == 'General'


def test_get_format_number():
    assert ssf.get_format('number') == '0.00'
    assert ssf.get_format('number', places=2) == '0.00'
    assert ssf.get_format('number', places=0) == '0'
    assert ssf.get_format('number', places=3) == '0.000'
    assert ssf.get_format('number', places=8) == '0.00000000'
    assert ssf.get_format('NUMBER', use_thousands_separator=True) == '#,##0.00'
    assert ssf.get_format('NUMBER', places=2,
                          use_thousands_separator=True) == '#,##0.00'
    assert ssf.get_format('NUMBER', places=0,
                          use_thousands_separator=True) == '#,##0'
    assert ssf.get_format('NUMBER', places=6,
                          use_thousands_separator=True) == '#,##0.000000'
    assert ssf.get_format('Number', negative_numbers='red') == '0.00;[Red]0.00'
    assert ssf.get_format(
        'Number', negative_numbers='redparen') == '_(0.00_);[Red](0.00)'
    assert ssf.get_format(
        'Number', negative_numbers='red,paren') == '_(0.00_);[Red](0.00)'
    assert ssf.get_format('Number',
                          negative_numbers='red()') == '_(0.00_);[Red](0.00)'
    assert ssf.get_format('Number',
                          negative_numbers='paren') == '_(0.00_);(0.00)'
Ejemplo n.º 20
0
def test_no_locale():
    ssf = SSF(locale_support=False)
    assert ssf.format('#,##0', 1234) == '1,234'
    assert ssf.format('#,##0', 12345678) == '12,345,678'
    assert ssf.format('0', 12345678) == '12345678'
    assert ssf.format(14, '1/01/2020') == '1/1/2020'

    ssf.format('mmmm', '1/1/2020') == 'January'
    ssf.format('mmmm', '1/1/2020', locale='fr-FR') == 'January'
    ssf.format('[$-40C]mmmm', '1/1/2020') == 'January'
Ejemplo n.º 21
0
def test_normalize_locale():
    ssf = SSF(locale='EN')
    assert ssf.locale == 'en'

    ssf = SSF(locale='en-us')
    assert ssf.locale == 'en-US'

    ssf = SSF(locale='En-Us')
    assert ssf.locale == 'en-US'

    ssf = SSF(locale='EN-us')
    assert ssf.locale == 'en-US'

    ssf = SSF(locale='en_us')
    assert ssf.locale == 'en-US'

    ssf = SSF(locale='zh_hans')
    assert ssf.locale == 'zh-Hans'

    ssf = SSF(locale='Qps_PLOCM')
    assert ssf.locale == 'qps-plocm'

    ssf = SSF(locale='CA_ES-valencia')
    assert ssf.locale == 'ca-ES_valencia'

    ssf = SSF(locale='SR_LATN-CS')
    assert ssf.locale == 'sr-Latn_CS'

    ssf = SSF(locale='Ff-latn-sn')
    assert ssf.locale == 'ff-Latn_SN'

    ssf = SSF(locale='es-es-tradnl')
    assert ssf.locale == 'es-ES_tradnl'
Ejemplo n.º 22
0
def test_code_coverage1():
    """Tests to improve code coverage."""

    # normalize_locale
    assert ssf.format('#,###', 1000, locale='de-DE.extra') == '1.000'
    assert ssf.format('#,###', 1000, locale='de-DE@extra') == '1.000'

    # commaify
    ssfn = SSF(locale_support=False)
    assert ssfn.format('?,???,???', 1000) == '   1,000'
    assert ssfn.format('#,###', 1) == '1'

    # parse_date_code
    assert ssf.format('[hh]', -1 + 0.00001 / 86400) == '-24'

    # general_fmt
    assert ssf.format('General', True) == 'TRUE'
    assert ssf.format('General', False) == 'FALSE'
    assert ssf.format('General', True, align='left', width=6) == 'TRUE  '
    assert ssf.format('General', False, align='left', width=9) == 'FALSE    '
    assert ssf.format('General', True, align='right', width=6) == '  TRUE'
    assert ssf.format('General', False, align='right', width=9) == '    FALSE'

    assert ssf.format('General', timedelta(days=1)) == '1'
    assert ssf.format('General', None) == ''
    assert ssf.format('General', None, width=2) == '  '
    assert ssf.format('General', time(12, 0, 0)) == '1/0/1900'
    assert ssf.format('@', time(12, 0, 0)) == '0.5'
    try:
        actual = ssf.format('General', object())
        assert 'object object at' in actual
    except ValueError as e:  # Can't really get here
        assert 'unsupported value' in str(e)

    # write_date
    assert ssf.format('s', 0) == '0'
    assert ssf.format('s', 1 / 86400) == '1'

    # write_num_exp
    assert ssf.format('###.00E+0', 0) == '000.00E+0'
    assert ssf.format('###.00E+0', 0.0) == '000.00E+0'
    assert ssf.format('###.00E+0', 1.2E-4) == '120.00E-6'

    # write_num_f2
    assert ssf.format('# ?/2', 1) == '1    '
    assert ssf.format('?/2', 1) == '2/2'
    assert ssf.format('?/?', 1) == '1/1'
    assert ssf.format('?/?', 2) == '2/1'

    # write_num_flt / int
    assert ssf.format(r'(###) ###\-####', 2125551212.01) == '(212) 555-1212'
    assert ssf.format(r'(###) ###\-####', 2125551212) == '(212) 555-1212'
    assert ssf.format('00000-0000', 5270101.01) == '00527-0101'
    assert ssf.format('00000-0000', 5270101) == '00527-0101'
    assert ssf.format('0', True) == 'TRUE'
    assert ssf.format('0', False) == 'FALSE'

    # _eval_fmt
    try:
        ssf.format('0"a', 0)
        assert False  # Failed to catch error
    except ValueError as e:
        assert 'unterminated string' in str(e)

    assert ssf.format('b1', -1) == '##########'

    try:
        ssf.format('[red', 0)
        assert False  # Failed to catch error
    except ValueError as e:
        assert 'unterminated' in str(e)

    try:
        ssf.format('[$-12345678]0.00E+00', -1.23E+45)
    except ValueError as e:
        assert 'Cannot handle' in str(e)

    assert ssf.format('[ss]', datetime(9999, 12, 31, 23, 59, 59,
                                       999999)) == '##########'
Ejemplo n.º 23
0
def test_code_coverage2():
    # _replace_numbers
    assert ssf.format('[$-1E000000]0.00E+00', -1.23E+45) == '-一.二三五百四五'
    assert ssf.format('[$-1E000000]0.00E+00', -1.23E-45) == '-一.二三五万四五'

    # _get_locale
    ssfi = SSF(errors='ignore')
    assert ssfi.format('#,###,###.##', 1000.1,
                       locale='deDE') == '1,000.1'  # Bad locale - ignored

    try:
        ssf.format('#,###,###.##', 1000.1, locale='deDE')
        assert False  # failed
    except Exception as e:
        assert 'Locale' in str(e)

    # format
    ssfe = SSF(locale='deDE', errors='pounds')
    assert ssfe.format('0', 0) == '##########'

    assert ssf.format(
        1024, 1025) == '1025'  # Incorrect format number defaults to General

    ssfp = SSF(errors='#')
    assert ssfp.format('[red', 0) == '##########'

    # SSF_CALENDAR

    try:
        ssf.format('[$-7F0000]yyyy', 100)
        assert False
    except ValueError:
        pass

    # _escape_dots

    assert ssf.format(r'[Red]\x"abc"0.0.0.0', 1234.567) == 'xabc1234.5.6.7'

    # set_day_names

    try:
        ssf.set_day_names(['Monday', 'Tuesday'])
        assert False  # Failed
    except ValueError:
        pass

    try:
        ssf.set_day_names(["1", "2", "3", "4", "5", "6", "7"])
        assert False  # Failed
    except ValueError:
        pass

    try:
        ssf.set_day_names([1, 2, 3, 4, 5, 6, 7])
        assert False  # Failed
    except ValueError:
        pass

    try:
        ssf.set_day_names([(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6),
                           (7, 7)])
        assert False  # Failed
    except ValueError:
        pass

    # set_month_names

    try:
        ssf.set_month_names(['Jan', 'Feb'])
        assert False  # Failed
    except ValueError:
        pass

    try:
        ssf.set_month_names([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
        assert False  # Failed
    except ValueError:
        pass

    try:
        ssf.set_month_names([
            0, ("J", "Jan"), ("F", "Feb"), ("M", "Mar"), ("A", "Apr"),
            ("M", "May"), ("J", "Jun"), ("J", "Jul"), ("A", "Aug"),
            ("S", "Sep"), ("O", "Oct"), ("N", "Nov"), ("D", "Dec")
        ])  # Missing the long version
        assert False  # Failed
    except ValueError:
        pass

    try:
        ssf.set_month_names([
            0, (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5),
            (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9), (10, 10, 10),
            (11, 11, 11), (12, 12, 12)
        ])
        assert False  # Failed
    except ValueError:
        pass
Ejemplo n.º 24
0
def test_issue_12():
    ssfa = SSF(locale='ar', errors='raise')
    assert ssfa.format('Short Date', 3.14159) == '03\u200f/1\u200f/00'
Ejemplo n.º 25
0
def test_locale_simple():
    """Start by just testing a few simple cases"""
    ssfe = SSF(locale='en-US')
    assert ssfe.format('#,###.00', 1000000) == '1,000,000.00'
    assert ssfe.format('#,###.00',
                       1000000,
                       decimal_separator=',',
                       thousands_separator='.') == '1.000.000,00'
    assert ssfe.format('#,###.00', 1000000,
                       decimal_separator='!') == '1,000,000!00'
    assert ssfe.format('#,###.00',
                       1000000,
                       decimal_separator='!',
                       thousands_separator='@') == '1@000@000!00'
    assert ssfe.format('#,###.00', 1000000, locale='en-US') == '1,000,000.00'
    assert ssfe.format('#,###.00', 1000000, locale='de-DE') == '1.000.000,00'
    assert ssfe.format('#,###.00', 1000000,
                       locale='fr-FR') == '1\u202f000\u202f000,00'
    assert ssfe.format('#,###.00', 1000000, locale='hi_IN') == '10,00,000.00'
    assert ssfe.format('#,###.00', 1000000) == '1,000,000.00'
    assert ssfe.format(
        '[$-409]#,###.00', 1000000, locale='de-DE'
    ) == '1.000.000,00'  # Format does NOT override locale arg for ,.
    assert ssfe.format('dddd, mmmm d, yyyy',
                       '9/26/2020') == 'Saturday, September 26, 2020'
    assert ssfe.format('[$-409]dddd, mmmm d, yyyy',
                       '9/26/2020',
                       locale='fr-FR') == 'Saturday, September 26, 2020'
    assert ssfe.format('Currency', 1000.98) == '$1,000.98'
    assert ssfe.format('Currency', 1000.98,
                       locale='de-DE') == '1.000,98 €'  # Euros

    ssfd = SSF(locale='de-DE')
    assert ssfd.format('#,###.00', 1000000, locale='en-US') == '1,000,000.00'
    assert ssfd.format('#,###.00', 1000000) == '1.000.000,00'
    assert ssfe.format('#,###.00',
                       1000000,
                       decimal_separator='!',
                       thousands_separator='@') == '1@000@000!00'
    assert ssfd.format('#,###.00', 1000000, locale='de-DE') == '1.000.000,00'
    assert ssfd.format('#,###.00', 1000000,
                       locale='fr-FR') == '1\u202f000\u202f000,00'
    assert ssfd.format('#,###.00', 1000000, locale='hi_IN') == '10,00,000.00'
    assert ssfd.format('#,###.00', 1000000) == '1.000.000,00'
    assert ssfd.format(
        '[$-409]#,###.00',
        1000000) == '1.000.000,00'  # Format does NOT override default for ,.
    assert ssfd.format(
        '[$-409]#,###.00', 1000000,
        locale='hi_IN') == '10,00,000.00'  # Format does NOT override ,.
    assert ssfd.format('[$-409]dddd, mmmm d, yyyy',
                       '9/26/2020') == 'Saturday, September 26, 2020'
    assert ssfd.format('[$-409]dddd, mmmm d, yyyy',
                       '9/26/2020',
                       locale='fr-FR') == 'Saturday, September 26, 2020'
    assert ssfd.format('dddd, mmmm d, yyyy',
                       '9/26/2020') == 'Samstag, September 26, 2020'
    assert ssfd.format('dddd, mmmm d, yyyy', '9/26/2020',
                       locale='fr-FR') == 'samedi, septembre 26, 2020'
    assert ssfd.format('[$-40C]dddd, mmmm d, yyyy',
                       '9/26/2020') == 'samedi, septembre 26, 2020'
    assert ssfd.format('[$-40c]dddd, mmmm d, yyyy',
                       '9/26/2020') == 'samedi, septembre 26, 2020'
    assert ssfd.format('dddd, mmmm d, yyyy',
                       '10/26/2020') == 'Montag, Oktober 26, 2020'

    ssfj = SSF(locale='ja-JP')
    assert ssfj.format('#,###.00', 1000000, locale='en-US') == '1,000,000.00'
    assert ssfj.format('#,###.00', 1000000) == '1,000,000.00'
    assert ssfj.format('#,###.00', 1000000, locale='de-DE') == '1.000.000,00'
    assert ssfj.format('#,###.00', 1000000,
                       locale='fr-FR') == '1\u202f000\u202f000,00'
    assert ssfj.format('#,###.00', 1000000, locale='hi_IN') == '10,00,000.00'
    assert ssfj.format('#,###.00', 1000000) == '1,000,000.00'
    assert ssfj.format('[$-409]#,###.00', 1000000) == '1,000,000.00'
    assert ssfj.format(
        '[$-409]#,###.00', 1000000,
        locale='hi_IN') == '10,00,000.00'  # Format does NOT override ,.
    assert ssfj.format('[$-409]dddd, mmmm d, yyyy',
                       '9/26/2020') == 'Saturday, September 26, 2020'
    assert ssfj.format('[$-409]dddd, mmmm d, yyyy',
                       '9/26/2020',
                       locale='fr-FR') == 'Saturday, September 26, 2020'
    assert ssfj.format('dddd, mmmm d, yyyy', '9/26/2020') == '土曜日, 9月 26, 2020'
    assert ssfj.format('dddd, mmmm d, yyyy', '9/26/2020',
                       locale='fr-FR') == 'samedi, septembre 26, 2020'
    assert ssfj.format('[$-40C]dddd, mmmm d, yyyy',
                       '9/26/2020') == 'samedi, septembre 26, 2020'
    assert ssfj.format('[$-40c]dddd, mmmm d, yyyy',
                       '9/26/2020') == 'samedi, septembre 26, 2020'
    assert ssfj.format('[$-fr-FR]dddd, mmmm d, yyyy',
                       '9/26/2020') == 'samedi, septembre 26, 2020'
    assert ssfj.format('[$-FR_fr]dddd, mmmm d, yyyy',
                       '9/26/2020') == 'samedi, septembre 26, 2020'
    assert ssfj.format('[DBNum1]0', 123) == '一二三'
    assert ssfj.format('[DBNum1]0', 987654) == '九八七六五四'
    assert ssfj.format('[DBNum2]0', 123) == '壱弐参'
    assert ssfj.format('[DBNum3]0', 123) == '123'
    assert ssfj.format('[DBNum1][$-404]0', 0) == '○'
    assert ssfj.format('[DBNum1][$-412]0', 0) == '0'
    # Issue #9: Test eras:
    assert ssfj.format('g gg ggg e', '1/1/1900') == 'M 明 明治 33'
    assert ssfj.format('g gg ggg e', '7/29/1912') == 'M 明 明治 45'
    assert ssfj.format('g gg ggg e', '7/30/1912') == 'T 大 大正 1'
    assert ssfj.format('g gg ggg e', '12/24/1926') == 'T 大 大正 15'
    assert ssfj.format('g gg ggg e', '12/25/1926') == 'S 昭 昭和 1'
    assert ssfj.format('g gg ggg e', '1/7/1989') == 'S 昭 昭和 64'
    assert ssfj.format('g gg ggg e', '1/8/1989') == 'H 平 平成 1'
    assert ssfj.format('[$-ja-JP-x-gannen]g gg ggg e',
                       '1/8/1989') == 'H 平 平成 元'
    assert ssfj.format('g gg ggg e', '4/30/2019') == 'H 平 平成 31'
    assert ssfj.format('g gg ggg e', '5/1/2019') == 'R 令 令和 1'
    assert ssfj.format('g gg ggg e', '1/1/2020') == 'R 令 令和 2'
    assert ssfj.format('[$-ja-JP-x-gannen]g gg ggg e',
                       '5/1/2019') == 'R 令 令和 元'
    assert ssfj.format('[$-ja-JP-x-gannen]g gg ggg e',
                       '1/1/2020') == 'R 令 令和 2'

    # Test [$-lg-CN,xxyy] and [$-xxyyzzzz]
    assert ssfe.format(r'[$-4000439]h:mm:ss\ AM/PM;@',
                       12.3456789) == '८:१७:४७ पूर्वाह्न'
    assert ssfe.format(r'[$-hi-IN,400]h:mm:ss\ AM/PM;@',
                       12.3456789) == '८:१७:४७ पूर्वाह्न'
    assert ssfe.format(r'[$-4010439]d/m/yyyy\ h:mm\ AM/PM;@',
                       12.3456789) == '१२/१/१९०० ८:१७ पूर्वाह्न'
    assert ssfe.format(r'[$-hi-IN,401]d/m/yyyy\ h:mm\ AM/PM;@',
                       12.3456789) == '१२/१/१९०० ८:१७ पूर्वाह्न'
    assert ssfj.format(r'[$-D000409]h:mm\ AM/PM;@', 12.3456789) == '๘:๑๗ AM'
    assert ssfe.format(r'[$-,D00]h:mm\ AM/PM;@', 12.3456789) == '๘:๑๗ AM'

    ssfex = SSF(locale='en-US',
                decimal_separator='!!',
                thousands_separator='@')
    assert ssfex.format('#,###.00', 1000000) == '1@000@000!!00'
    assert ssfex.format('#,###.00', 1000000, locale='de-DE') == '1.000.000,00'
    assert ssfex.format('#,###.00',
                        1000000,
                        locale='de-DE',
                        decimal_separator='inherit',
                        thousands_separator='inherit') == '1@000@000!!00'
    assert ssfex.format('#,###.00', 1000000, width=13) == '1@000@000!!00'
    assert ssfex.format('#,###.00', 1000000, width=12) == '#' * 12
Ejemplo n.º 26
0
#/* vim: set ts=2: */
#/*jshint -W041 */
#/*jshint loopfunc:true, mocha:true, node:true, evil:true */
#var SSF = require('../');
from ssf import SSF
ssf = SSF()
ssf1904 = SSF(date1904=True)
#var fs = require('fs'), assert = require('assert');
#var data = JSON.parse(fs.readFileSync('./test/date.json','utf8'));
import json
import re
from datetime import date
with open('tests/date.json', 'r', encoding='utf-8') as d:
    data = json.load(d)


#
#describe('date values', function() {
def test_data_values():
    #	it('should roundtrip dates', function() { data.forEach(function(d) {
    for d in data:
        #		assert.equal(SSF.format("yyyy-mm-dd HH:MM:SS", eval(d[0]), {date1904:!!d[2]}), d[1]);
        formatter = ssf1904 if d[2] else ssf
        m = re.match(r'new Date\((\d+),(\d+),(\d+)\)', d[0])
        assert m
        dt = date(int(m.group(1)), int(m.group(2)) + 1, int(m.group(3)))
        assert formatter.format("yyyy-mm-dd HH:MM:SS", dt) == d[1]


#	}); });
#});
Ejemplo n.º 27
0
#!/home/jorost/venv/bin/python
from ssf import SSF
import cgi
import cgitb
import json
#import base64
from urllib.parse import quote
cgitb.enable()
#cgi.test()
cgi.parse()
form = cgi.FieldStorage()
ssf = SSF(color_pre="<span style='color: #{rgb};'>", color_post="</span>")
locale = form.getfirst('locale', default=None)
if locale == 'None':
    locale = None
getfmt = form.getfirst('getfmt', default=None)
if getfmt is not None:
    places = None
    thousands_sep = None
    negative = None
    positive_sign_exponent = False
    for key in form.keys():
        if 'places' in key:
            places = form.getfirst(key, default=None)
            if places is not None and places.isdigit():
                places = int(places)
        elif 'thousands' in key:
            thousands_sep = True
        elif 'negative' in key:
            negative = form.getfirst(key, default=None)
        elif 'positive' in key:
Ejemplo n.º 28
0
def test_issue_14():
    ssfnf = SSF(dateNF='m/d/yy')
    assert ssfnf.format(14, '12/31/1999') == '12/31/99'