pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/fmtc/fmtc_test.go (about)

     1  package fmtc
     2  
     3  // ////////////////////////////////////////////////////////////////////////////////// //
     4  //                                                                                    //
     5  //                         Copyright (c) 2022 ESSENTIAL KAOS                          //
     6  //      Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>     //
     7  //                                                                                    //
     8  // ////////////////////////////////////////////////////////////////////////////////// //
     9  
    10  import (
    11  	"bytes"
    12  	"errors"
    13  	"os"
    14  	"testing"
    15  
    16  	. "pkg.re/essentialkaos/check.v1"
    17  )
    18  
    19  // ////////////////////////////////////////////////////////////////////////////////// //
    20  
    21  func Test(t *testing.T) { TestingT(t) }
    22  
    23  type FormatSuite struct{}
    24  
    25  // ////////////////////////////////////////////////////////////////////////////////// //
    26  
    27  var _ = Suite(&FormatSuite{})
    28  
    29  func (s *FormatSuite) TestColors(c *C) {
    30  	c.Assert(Sprint("{r}W{!}"), Equals, "\x1b[31mW\x1b[0m")
    31  	c.Assert(Sprint("{g}W{!}"), Equals, "\x1b[32mW\x1b[0m")
    32  	c.Assert(Sprint("{y}W{!}"), Equals, "\x1b[33mW\x1b[0m")
    33  	c.Assert(Sprint("{b}W{!}"), Equals, "\x1b[34mW\x1b[0m")
    34  	c.Assert(Sprint("{m}W{!}"), Equals, "\x1b[35mW\x1b[0m")
    35  	c.Assert(Sprint("{c}W{!}"), Equals, "\x1b[36mW\x1b[0m")
    36  	c.Assert(Sprint("{s}W{!}"), Equals, "\x1b[37mW\x1b[0m")
    37  	c.Assert(Sprint("{w}W{!}"), Equals, "\x1b[97mW\x1b[0m")
    38  	c.Assert(Sprint("{r-}W{!}"), Equals, "\x1b[91mW\x1b[0m")
    39  	c.Assert(Sprint("{g-}W{!}"), Equals, "\x1b[92mW\x1b[0m")
    40  	c.Assert(Sprint("{y-}W{!}"), Equals, "\x1b[93mW\x1b[0m")
    41  	c.Assert(Sprint("{b-}W{!}"), Equals, "\x1b[94mW\x1b[0m")
    42  	c.Assert(Sprint("{m-}W{!}"), Equals, "\x1b[95mW\x1b[0m")
    43  	c.Assert(Sprint("{c-}W{!}"), Equals, "\x1b[96mW\x1b[0m")
    44  	c.Assert(Sprint("{s-}W{!}"), Equals, "\x1b[90mW\x1b[0m")
    45  	c.Assert(Sprint("{w-}W{!}"), Equals, "\x1b[97mW\x1b[0m")
    46  }
    47  
    48  func (s *FormatSuite) TestBackgrounds(c *C) {
    49  	c.Assert(Sprint("{R}W{!}"), Equals, "\x1b[41mW\x1b[0m")
    50  	c.Assert(Sprint("{G}W{!}"), Equals, "\x1b[42mW\x1b[0m")
    51  	c.Assert(Sprint("{Y}W{!}"), Equals, "\x1b[43mW\x1b[0m")
    52  	c.Assert(Sprint("{B}W{!}"), Equals, "\x1b[44mW\x1b[0m")
    53  	c.Assert(Sprint("{M}W{!}"), Equals, "\x1b[45mW\x1b[0m")
    54  	c.Assert(Sprint("{C}W{!}"), Equals, "\x1b[46mW\x1b[0m")
    55  	c.Assert(Sprint("{S}W{!}"), Equals, "\x1b[47mW\x1b[0m")
    56  	c.Assert(Sprint("{W}W{!}"), Equals, "\x1b[107mW\x1b[0m")
    57  }
    58  
    59  func (s *FormatSuite) TestModificators(c *C) {
    60  	c.Assert(Sprint("{!}"), Equals, "\x1b[0m")
    61  	c.Assert(Sprint("{*}W{!}"), Equals, "\x1b[1mW\x1b[0m")
    62  	c.Assert(Sprint("{^}W{!}"), Equals, "\x1b[2mW\x1b[0m")
    63  	c.Assert(Sprint("{_}W{!}"), Equals, "\x1b[4mW\x1b[0m")
    64  	c.Assert(Sprint("{~}W{!}"), Equals, "\x1b[5mW\x1b[0m")
    65  	c.Assert(Sprint("{@}W{!}"), Equals, "\x1b[7mW\x1b[0m")
    66  }
    67  
    68  func (s *FormatSuite) TestReset(c *C) {
    69  	c.Assert(Sprint("{*}W{!*}K{!}"), Equals, "\x1b[1mW\x1b[22mK\x1b[0m")
    70  	c.Assert(Sprint("{^}W{!^}K{!}"), Equals, "\x1b[2mW\x1b[22mK\x1b[0m")
    71  	c.Assert(Sprint("{_}W{!_}K{!}"), Equals, "\x1b[4mW\x1b[24mK\x1b[0m")
    72  	c.Assert(Sprint("{~}W{!~}K{!}"), Equals, "\x1b[5mW\x1b[25mK\x1b[0m")
    73  	c.Assert(Sprint("{@}W{!@}K{!}"), Equals, "\x1b[7mW\x1b[27mK\x1b[0m")
    74  }
    75  
    76  func (s *FormatSuite) TestParsing(c *C) {
    77  	c.Assert(Sprint(""), Equals, "")
    78  	c.Assert(Sprint("{}"), Equals, "{}")
    79  	c.Assert(Sprint("{-}"), Equals, "{-}")
    80  	c.Assert(Sprint("W"), Equals, "W")
    81  	c.Assert(Sprint("{"), Equals, "{")
    82  	c.Assert(Sprint("{r"), Equals, "{r")
    83  	c.Assert(Sprint("{J}W"), Equals, "{J}W")
    84  	c.Assert(Sprint("{r}W"), Equals, "\x1b[31mW\x1b[0m")
    85  	c.Assert(Sprint("{{r}W{!}}"), Equals, "{\x1b[31mW\x1b[0m}")
    86  	c.Assert(Sprint("Test"+string(rune(65533))), Equals, "Test")
    87  }
    88  
    89  func (s *FormatSuite) Test256Colors(c *C) {
    90  	term = "xterm-256color"
    91  	colorTerm = ""
    92  
    93  	colorsSupportChecked = false
    94  
    95  	c.Assert(Is256ColorsSupported(), Equals, true)
    96  	c.Assert(IsTrueColorSupported(), Equals, false)
    97  
    98  	colorsSupportChecked = false
    99  	colors256Supported = false
   100  	colorsTCSupported = false
   101  	term = ""
   102  	colorTerm = ""
   103  
   104  	c.Assert(Is256ColorsSupported(), Equals, false)
   105  	c.Assert(Is256ColorsSupported(), Equals, false)
   106  	c.Assert(IsTrueColorSupported(), Equals, false)
   107  
   108  	term = os.Getenv("TERM")
   109  	colorTerm = os.Getenv("COLORTERM")
   110  
   111  	c.Assert(Sprint("{#214}o{!}"), Equals, "\x1b[38;5;214mo\x1b[0m")
   112  	c.Assert(Sprint("{%214}O{!}"), Equals, "\x1b[48;5;214mO\x1b[0m")
   113  
   114  	c.Assert(Sprint("{#}o"), Equals, "{#}o")
   115  	c.Assert(Sprint("{#257}o"), Equals, "{#257}o")
   116  	c.Assert(Sprint("{#-1}o"), Equals, "{#-1}o")
   117  }
   118  
   119  func (s *FormatSuite) Test24BitColors(c *C) {
   120  	term = "xterm-256color"
   121  	colorTerm = "truecolor"
   122  
   123  	colorsSupportChecked = false
   124  
   125  	c.Assert(IsTrueColorSupported(), Equals, true)
   126  	c.Assert(Is256ColorsSupported(), Equals, true)
   127  
   128  	colorsSupportChecked = false
   129  	colors256Supported = false
   130  	colorsTCSupported = false
   131  	term = ""
   132  	colorTerm = ""
   133  
   134  	c.Assert(IsTrueColorSupported(), Equals, false)
   135  	c.Assert(IsTrueColorSupported(), Equals, false)
   136  
   137  	term = os.Getenv("TERM")
   138  	colorTerm = os.Getenv("COLORTERM")
   139  
   140  	c.Assert(Sprint("{#f1c1b2}o{!}"), Equals, "\x1b[38;2;241;193;178mo\x1b[0m")
   141  	c.Assert(Sprint("{%1F2E3D}O{!}"), Equals, "\x1b[48;2;31;46;61mO\x1b[0m")
   142  
   143  	c.Assert(Sprint("{#}o"), Equals, "{#}o")
   144  	c.Assert(Sprint("{#gggggg}o"), Equals, "{#gggggg}o")
   145  	c.Assert(Sprint("{#-1}o"), Equals, "{#-1}o")
   146  }
   147  
   148  func (s *FormatSuite) TestZDisable(c *C) {
   149  	DisableColors = true
   150  
   151  	c.Assert(Sprint("{r}W{!}"), Equals, "W")
   152  	c.Assert(Sprint("{g}W{!}"), Equals, "W")
   153  	c.Assert(Sprint("{y}W{!}"), Equals, "W")
   154  	c.Assert(Sprint("{b}W{!}"), Equals, "W")
   155  	c.Assert(Sprint("{m}W{!}"), Equals, "W")
   156  	c.Assert(Sprint("{c}W{!}"), Equals, "W")
   157  	c.Assert(Sprint("{s}W{!}"), Equals, "W")
   158  	c.Assert(Sprint("{R}W{!}"), Equals, "W")
   159  	c.Assert(Sprint("{G}W{!}"), Equals, "W")
   160  	c.Assert(Sprint("{Y}W{!}"), Equals, "W")
   161  	c.Assert(Sprint("{B}W{!}"), Equals, "W")
   162  	c.Assert(Sprint("{M}W{!}"), Equals, "W")
   163  	c.Assert(Sprint("{C}W{!}"), Equals, "W")
   164  	c.Assert(Sprint("{S}W{!}"), Equals, "W")
   165  	c.Assert(Sprint("{S*_}W{!}"), Equals, "W")
   166  
   167  	c.Assert(Sprint("Test {config} value"), Equals, "Test {config} value")
   168  
   169  	DisableColors = false
   170  }
   171  
   172  func (s *FormatSuite) TestClean(c *C) {
   173  	c.Assert(Clean("{r}W{!}"), Equals, "W")
   174  	c.Assert(Clean("{g}W{!}"), Equals, "W")
   175  	c.Assert(Clean("{y}W{!}"), Equals, "W")
   176  	c.Assert(Clean("{b}W{!}"), Equals, "W")
   177  	c.Assert(Clean("{m}W{!}"), Equals, "W")
   178  	c.Assert(Clean("{c}W{!}"), Equals, "W")
   179  	c.Assert(Clean("{s}W{!}"), Equals, "W")
   180  	c.Assert(Clean("{R}W{!}"), Equals, "W")
   181  	c.Assert(Clean("{G}W{!}"), Equals, "W")
   182  	c.Assert(Clean("{Y}W{!}"), Equals, "W")
   183  	c.Assert(Clean("{B}W{!}"), Equals, "W")
   184  	c.Assert(Clean("{M}W{!}"), Equals, "W")
   185  	c.Assert(Clean("{C}W{!}"), Equals, "W")
   186  	c.Assert(Clean("{S}W{!}"), Equals, "W")
   187  	c.Assert(Clean("{S*_}W{!}"), Equals, "W")
   188  }
   189  
   190  func (s *FormatSuite) TestMethods(c *C) {
   191  	c.Assert(Errorf("Test %s", "OK"), DeepEquals, errors.New("Test OK"))
   192  	c.Assert(Sprintf("Test %s", "OK"), Equals, "Test OK")
   193  	c.Assert(Sprintln("Test OK"), Equals, "Test OK\n")
   194  
   195  	w := bytes.NewBufferString("")
   196  
   197  	Fprint(w, "TEST")
   198  
   199  	c.Assert(w.String(), Equals, "TEST")
   200  
   201  	w = bytes.NewBufferString("")
   202  
   203  	Fprintln(w, "TEST")
   204  
   205  	c.Assert(w.String(), Equals, "TEST\n")
   206  
   207  	w = bytes.NewBufferString("")
   208  
   209  	Fprintf(w, "TEST %s", "OK")
   210  
   211  	c.Assert(w.String(), Equals, "TEST OK")
   212  
   213  	Printf("Printf: %s\n", "OK")
   214  	Print("Print: OK\n")
   215  
   216  	LPrintf(11, "LPrintf: %s NOTOK", "OK")
   217  	NewLine()
   218  	LPrintln(12, "LPrintln: OK NOTOK")
   219  }
   220  
   221  func (s *FormatSuite) TestAux(c *C) {
   222  	TPrintf("TPrint: %s", "OK")
   223  	TPrintf("")
   224  	TPrintf("TPrint: %s", "OK")
   225  
   226  	TPrintln("TPrint: OK")
   227  
   228  	TLPrintf(11, "TLPrint: %s NOTOK", "OK")
   229  	TLPrintf(11, "")
   230  	TLPrintf(11, "TLPrint: %s NOTOK", "OK")
   231  
   232  	TLPrintln(11, "TLPrint: OK NOTOK")
   233  
   234  	Bell()
   235  }
   236  
   237  func (s *FormatSuite) TestFuzzFixes(c *C) {
   238  	c.Assert(isValidTag("!!!"), Equals, false)
   239  	c.Assert(isValidTag("---"), Equals, false)
   240  	c.Assert(isValidTag("-!"), Equals, false)
   241  	c.Assert(isValidTag("!--"), Equals, false)
   242  	c.Assert(tag2ANSI("-!", false), Equals, "")
   243  }