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_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_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_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_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_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_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)
def test_issue_14(): ssfnf = SSF(dateNF='m/d/yy') assert ssfnf.format(14, '12/31/1999') == '12/31/99'
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
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!
elif 'thousands' in key: thousands_sep = True elif 'negative' in key: negative = form.getfirst(key, default=None) elif 'positive' in key: positive_sign_exponent = True result = ssf.get_format(type=getfmt, places=places, use_thousands_separator=thousands_sep, negative_numbers=negative, positive_sign_exponent=positive_sign_exponent, locale=locale) else: fmt = form.getfirst('fmt', '') val = form.getfirst('val', '') try: val = float(val) except Exception: pass width = form.getfirst('width', default=None) if width is not None and width.isdigit(): width = int(width) else: width = None result = ssf.format(fmt, val, width=width, locale=locale) print("Content-Type: text/plain; charset=UTF-8") print() print(quote(result))
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_issue_12(): ssfa = SSF(locale='ar', errors='raise') assert ssfa.format('Short Date', 3.14159) == '03\u200f/1\u200f/00'
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