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) == '##'
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'
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"
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'
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)
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
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"
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"
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_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)
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)
# 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 '
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
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'
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!
#/* 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']] } #];
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:
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}',
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)'
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'
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'
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)) == '##########'
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
def test_issue_12(): ssfa = SSF(locale='ar', errors='raise') assert ssfa.format('Short Date', 3.14159) == '03\u200f/1\u200f/00'
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
#/* 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] # }); }); #});
#!/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:
def test_issue_14(): ssfnf = SSF(dateNF='m/d/yy') assert ssfnf.format(14, '12/31/1999') == '12/31/99'