github.com/mithrandie/csvq@v1.18.1/lib/query/string_formatter_test.go (about)

     1  package query
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/mithrandie/csvq/lib/value"
     8  	"github.com/mithrandie/ternary"
     9  )
    10  
    11  var stringFormatterFormatTests = []struct {
    12  	Format string
    13  	Values []value.Primary
    14  	Expect string
    15  	Error  string
    16  }{
    17  	{
    18  		Format: "--%d--%+6d--% d--%06d--%-10d--%4d--%04d--%d--",
    19  		Values: []value.Primary{
    20  			value.NewInteger(123),
    21  			value.NewInteger(123),
    22  			value.NewInteger(123),
    23  			value.NewInteger(123),
    24  			value.NewInteger(123),
    25  			value.NewNull(),
    26  			value.NewNull(),
    27  			value.NewNull(),
    28  		},
    29  		Expect: "--123--  +123-- 123--000123--123       --    --    ----",
    30  	},
    31  	{
    32  		Format: "--%b--%o--%x--%X--% x--",
    33  		Values: []value.Primary{
    34  			value.NewInteger(123),
    35  			value.NewInteger(123),
    36  			value.NewInteger(123),
    37  			value.NewInteger(123),
    38  			value.NewInteger(123),
    39  		},
    40  		Expect: "--1111011--173--7b--7B-- 7b--",
    41  	},
    42  	{
    43  		Format: "--%e--%E--%f--%.2f--%.f--%06f--%02f--%0f--%-6f--%6f--%2f--% f--%4f--%04f--%f--",
    44  		Values: []value.Primary{
    45  			value.NewFloat(123.456),
    46  			value.NewFloat(123.456),
    47  			value.NewFloat(123.456),
    48  			value.NewFloat(123.456),
    49  			value.NewFloat(123.456),
    50  			value.NewFloat(-1.2),
    51  			value.NewFloat(1.2),
    52  			value.NewFloat(-1.2),
    53  			value.NewFloat(1.2),
    54  			value.NewFloat(1.2),
    55  			value.NewFloat(1.2),
    56  			value.NewFloat(1.2),
    57  			value.NewNull(),
    58  			value.NewNull(),
    59  			value.NewNull(),
    60  		},
    61  		Expect: "--1.23456e+02--1.23456E+02--123.456--123.46--123---001.2--1.2---1.2--1.2   --   1.2--1.2-- 1.2--    --    ----",
    62  	},
    63  	{
    64  		Format: "--%s--%q--%i--%T--%.2i--%.2T--%%",
    65  		Values: []value.Primary{
    66  			value.NewString("str"),
    67  			value.NewString("str"),
    68  			value.NewString("str"),
    69  			value.NewString("str"),
    70  			value.NewString("str"),
    71  			value.NewString("str"),
    72  		},
    73  		Expect: "--str--'str'--`str`--String--`st`--St--%",
    74  	},
    75  	{
    76  		Format: "--%s--%s--%s--",
    77  		Values: []value.Primary{
    78  			value.NewString("str"),
    79  			value.NewTernary(ternary.TRUE),
    80  			value.NewDatetime(time.Date(2012, 2, 3, 9, 18, 15, 0, GetTestLocation())),
    81  		},
    82  		Expect: "--str--TRUE--2012-02-03T09:18:15Z--",
    83  	},
    84  	{
    85  		Format: "--%s--",
    86  		Values: []value.Primary{},
    87  		Error:  "number of replace values does not match",
    88  	},
    89  	{
    90  		Format: "--%s--",
    91  		Values: []value.Primary{
    92  			value.NewString("str"),
    93  			value.NewString("str"),
    94  		},
    95  		Error: "number of replace values does not match",
    96  	},
    97  	{
    98  		Format: "--%w--",
    99  		Values: []value.Primary{
   100  			value.NewString("str"),
   101  		},
   102  		Error: "\"w\" is an unknown placeholder",
   103  	},
   104  	{
   105  		Format: "--%0",
   106  		Values: []value.Primary{
   107  			value.NewString("str"),
   108  		},
   109  		Error: "unexpected termination of format string",
   110  	},
   111  }
   112  
   113  func TestStringFormatter_Format(t *testing.T) {
   114  	f := NewStringFormatter()
   115  
   116  	for _, v := range stringFormatterFormatTests {
   117  		result, err := f.Format(v.Format, v.Values)
   118  		if err != nil {
   119  			if len(v.Error) < 1 {
   120  				t.Errorf("unexpected error %q for %q, %v", err.Error(), v.Format, v.Values)
   121  			} else if err.Error() != v.Error {
   122  				t.Errorf("error %q, want error %q for %q, %v", err, v.Error, v.Format, v.Values)
   123  			}
   124  			continue
   125  		}
   126  		if 0 < len(v.Error) {
   127  			t.Errorf("no error, want error %q for %q, %v", v.Error, v.Format, v.Values)
   128  			continue
   129  		}
   130  		if result != v.Expect {
   131  			t.Errorf("result = %q, want %q for %q, %v", result, v.Expect, v.Format, v.Values)
   132  		}
   133  	}
   134  }