github.com/gohugoio/hugo@v0.88.1/common/htime/time_test.go (about)

     1  // Copyright 2021 The Hugo Authors. All rights reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  // http://www.apache.org/licenses/LICENSE-2.0
     7  //
     8  // Unless required by applicable law or agreed to in writing, software
     9  // distributed under the License is distributed on an "AS IS" BASIS,
    10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package htime
    15  
    16  import (
    17  	"testing"
    18  	"time"
    19  
    20  	translators "github.com/gohugoio/localescompressed"
    21  	qt "github.com/frankban/quicktest"
    22  )
    23  
    24  func TestTimeFormatter(t *testing.T) {
    25  	c := qt.New(t)
    26  
    27  	june06, _ := time.Parse("2006-Jan-02", "2018-Jun-06")
    28  	june06 = june06.Add(7777 * time.Second)
    29  
    30  	c.Run("Norsk nynorsk", func(c *qt.C) {
    31  		f := NewTimeFormatter(translators.GetTranslator("nn"))
    32  
    33  		c.Assert(f.Format(june06, "Monday Jan 2 2006"), qt.Equals, "onsdag juni 6 2018")
    34  		c.Assert(f.Format(june06, "Mon January 2 2006"), qt.Equals, "on. juni 6 2018")
    35  		c.Assert(f.Format(june06, "Mon Mon"), qt.Equals, "on. on.")
    36  	})
    37  
    38  	c.Run("Custom layouts Norsk nynorsk", func(c *qt.C) {
    39  		f := NewTimeFormatter(translators.GetTranslator("nn"))
    40  
    41  		c.Assert(f.Format(june06, ":date_full"), qt.Equals, "onsdag 6. juni 2018")
    42  		c.Assert(f.Format(june06, ":date_long"), qt.Equals, "6. juni 2018")
    43  		c.Assert(f.Format(june06, ":date_medium"), qt.Equals, "6. juni 2018")
    44  		c.Assert(f.Format(june06, ":date_short"), qt.Equals, "06.06.2018")
    45  
    46  		c.Assert(f.Format(june06, ":time_full"), qt.Equals, "kl. 02:09:37 UTC")
    47  		c.Assert(f.Format(june06, ":time_long"), qt.Equals, "02:09:37 UTC")
    48  		c.Assert(f.Format(june06, ":time_medium"), qt.Equals, "02:09:37")
    49  		c.Assert(f.Format(june06, ":time_short"), qt.Equals, "02:09")
    50  
    51  	})
    52  
    53  	c.Run("Custom layouts English", func(c *qt.C) {
    54  		f := NewTimeFormatter(translators.GetTranslator("en"))
    55  
    56  		c.Assert(f.Format(june06, ":date_full"), qt.Equals, "Wednesday, June 6, 2018")
    57  		c.Assert(f.Format(june06, ":date_long"), qt.Equals, "June 6, 2018")
    58  		c.Assert(f.Format(june06, ":date_medium"), qt.Equals, "Jun 6, 2018")
    59  		c.Assert(f.Format(june06, ":date_short"), qt.Equals, "6/6/18")
    60  
    61  		c.Assert(f.Format(june06, ":time_full"), qt.Equals, "2:09:37 am UTC")
    62  		c.Assert(f.Format(june06, ":time_long"), qt.Equals, "2:09:37 am UTC")
    63  		c.Assert(f.Format(june06, ":time_medium"), qt.Equals, "2:09:37 am")
    64  		c.Assert(f.Format(june06, ":time_short"), qt.Equals, "2:09 am")
    65  
    66  	})
    67  
    68  	c.Run("English", func(c *qt.C) {
    69  		f := NewTimeFormatter(translators.GetTranslator("en"))
    70  
    71  		c.Assert(f.Format(june06, "Monday Jan 2 2006"), qt.Equals, "Wednesday Jun 6 2018")
    72  		c.Assert(f.Format(june06, "Mon January 2 2006"), qt.Equals, "Wed June 6 2018")
    73  		c.Assert(f.Format(june06, "Mon Mon"), qt.Equals, "Wed Wed")
    74  	})
    75  
    76  }
    77  
    78  func BenchmarkTimeFormatter(b *testing.B) {
    79  	june06, _ := time.Parse("2006-Jan-02", "2018-Jun-06")
    80  
    81  	b.Run("Native", func(b *testing.B) {
    82  		for i := 0; i < b.N; i++ {
    83  			got := june06.Format("Monday Jan 2 2006")
    84  			if got != "Wednesday Jun 6 2018" {
    85  				b.Fatalf("invalid format, got %q", got)
    86  			}
    87  		}
    88  	})
    89  
    90  	b.Run("Localized", func(b *testing.B) {
    91  		f := NewTimeFormatter(translators.GetTranslator("nn"))
    92  		b.ResetTimer()
    93  		for i := 0; i < b.N; i++ {
    94  			got := f.Format(june06, "Monday Jan 2 2006")
    95  			if got != "onsdag juni 6 2018" {
    96  				b.Fatalf("invalid format, got %q", got)
    97  			}
    98  		}
    99  	})
   100  
   101  	b.Run("Localized Custom", func(b *testing.B) {
   102  		f := NewTimeFormatter(translators.GetTranslator("nn"))
   103  		b.ResetTimer()
   104  		for i := 0; i < b.N; i++ {
   105  			got := f.Format(june06, ":date_medium")
   106  			if got != "6. juni 2018" {
   107  				b.Fatalf("invalid format, got %q", got)
   108  			}
   109  		}
   110  	})
   111  }