mirror of
				https://gitcode.com/gitea/gitea.git
				synced 2025-10-26 05:04:27 +08:00 
			
		
		
		
	 b7b5834831
			
		
	
	b7b5834831
	
	
	
		
			
			- Added [GitHub's `relative-time` element](https://github.com/github/relative-time-element) - Converted all formatted timestamps to use this element - No more flashes of unstyled content around time elements - These elements are localized using the `lang` property of the HTML file - Relative (e.g. the activities in the dashboard) and duration (e.g. server uptime in the admin page) time elements are auto-updated to keep up with the current time without refreshing the page - Code that is not needed anymore such as `formatting.js` and parts of `since.go` have been deleted Replaces #21440 Follows #22861 ## Screenshots ### Localized   ### Tooltips #### Native for dates  #### Interactive for relative  ### Auto-update  --------- Signed-off-by: Yarden Shoham <git@yardenshoham.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: delvh <dev.lh@web.de>
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2019 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package timeutil
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"os"
 | |
| 	"testing"
 | |
| 	"time"
 | |
| 
 | |
| 	"code.gitea.io/gitea/modules/setting"
 | |
| 	"code.gitea.io/gitea/modules/translation"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| var BaseDate time.Time
 | |
| 
 | |
| // time durations
 | |
| const (
 | |
| 	DayDur   = 24 * time.Hour
 | |
| 	WeekDur  = 7 * DayDur
 | |
| 	MonthDur = 30 * DayDur
 | |
| 	YearDur  = 12 * MonthDur
 | |
| )
 | |
| 
 | |
| func TestMain(m *testing.M) {
 | |
| 	setting.StaticRootPath = "../../"
 | |
| 	setting.Names = []string{"english"}
 | |
| 	setting.Langs = []string{"en-US"}
 | |
| 	// setup
 | |
| 	translation.InitLocales(context.Background())
 | |
| 	BaseDate = time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC)
 | |
| 
 | |
| 	// run the tests
 | |
| 	retVal := m.Run()
 | |
| 
 | |
| 	os.Exit(retVal)
 | |
| }
 | |
| 
 | |
| func TestTimeSincePro(t *testing.T) {
 | |
| 	assert.Equal(t, "now", timeSincePro(BaseDate, BaseDate, translation.NewLocale("en-US")))
 | |
| 
 | |
| 	// test that a difference of `diff` yields the expected string
 | |
| 	test := func(expected string, diff time.Duration) {
 | |
| 		actual := timeSincePro(BaseDate, BaseDate.Add(diff), translation.NewLocale("en-US"))
 | |
| 		assert.Equal(t, expected, actual)
 | |
| 		assert.Equal(t, "future", timeSincePro(BaseDate.Add(diff), BaseDate, translation.NewLocale("en-US")))
 | |
| 	}
 | |
| 	test("1 second", time.Second)
 | |
| 	test("2 seconds", 2*time.Second)
 | |
| 	test("1 minute", time.Minute)
 | |
| 	test("1 minute, 1 second", time.Minute+time.Second)
 | |
| 	test("1 minute, 59 seconds", time.Minute+59*time.Second)
 | |
| 	test("2 minutes", 2*time.Minute)
 | |
| 	test("1 hour", time.Hour)
 | |
| 	test("1 hour, 1 second", time.Hour+time.Second)
 | |
| 	test("1 hour, 59 minutes, 59 seconds", time.Hour+59*time.Minute+59*time.Second)
 | |
| 	test("2 hours", 2*time.Hour)
 | |
| 	test("1 day", DayDur)
 | |
| 	test("1 day, 23 hours, 59 minutes, 59 seconds",
 | |
| 		DayDur+23*time.Hour+59*time.Minute+59*time.Second)
 | |
| 	test("2 days", 2*DayDur)
 | |
| 	test("1 week", WeekDur)
 | |
| 	test("2 weeks", 2*WeekDur)
 | |
| 	test("1 month", MonthDur)
 | |
| 	test("3 months", 3*MonthDur)
 | |
| 	test("1 year", YearDur)
 | |
| 	test("2 years, 3 months, 1 week, 2 days, 4 hours, 12 minutes, 17 seconds",
 | |
| 		2*YearDur+3*MonthDur+WeekDur+2*DayDur+4*time.Hour+
 | |
| 			12*time.Minute+17*time.Second)
 | |
| }
 | |
| 
 | |
| func TestMinutesToFriendly(t *testing.T) {
 | |
| 	// test that a number of minutes yields the expected string
 | |
| 	test := func(expected string, minutes int) {
 | |
| 		actual := MinutesToFriendly(minutes, translation.NewLocale("en-US"))
 | |
| 		assert.Equal(t, expected, actual)
 | |
| 	}
 | |
| 	test("1 minute", 1)
 | |
| 	test("2 minutes", 2)
 | |
| 	test("1 hour", 60)
 | |
| 	test("1 hour, 1 minute", 61)
 | |
| 	test("1 hour, 2 minutes", 62)
 | |
| 	test("2 hours", 120)
 | |
| }
 |