183 lines
5 KiB
Go
183 lines
5 KiB
Go
package testutils
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestStartTimer(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
if timer == nil {
|
|
t.Fatal("Expected timer to be non-nil")
|
|
}
|
|
if timer.start.IsZero() {
|
|
t.Error("Expected timer start time to be set")
|
|
}
|
|
if timer.t != t {
|
|
t.Error("Expected timer to reference the test")
|
|
}
|
|
if timer.name != t.Name() {
|
|
t.Errorf("Expected timer name to be '%s', got '%s'", t.Name(), timer.name)
|
|
}
|
|
}
|
|
|
|
func TestStartNamedTimer(t *testing.T) {
|
|
customName := "custom-test-name"
|
|
timer := StartNamedTimer(t, customName)
|
|
if timer == nil {
|
|
t.Fatal("Expected timer to be non-nil")
|
|
}
|
|
if timer.name != customName {
|
|
t.Errorf("Expected timer name to be '%s', got '%s'", customName, timer.name)
|
|
}
|
|
}
|
|
|
|
func TestTimer_Stop(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
|
|
// Attendre un peu pour avoir une durée mesurable
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
duration := timer.Stop()
|
|
if duration < 10*time.Millisecond {
|
|
t.Errorf("Expected duration to be at least 10ms, got %v", duration)
|
|
}
|
|
if duration > 100*time.Millisecond {
|
|
t.Errorf("Expected duration to be less than 100ms, got %v", duration)
|
|
}
|
|
}
|
|
|
|
func TestTimer_WarnIfSlow_SlowTest(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
threshold := 50 * time.Millisecond
|
|
|
|
// Faire un test "lent" (dépassant le seuil)
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
duration := timer.WarnIfSlow(threshold)
|
|
if duration < threshold {
|
|
t.Errorf("Expected duration to be greater than threshold %v, got %v", threshold, duration)
|
|
}
|
|
}
|
|
|
|
func TestTimer_WarnIfSlow_FastTest(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
threshold := 1 * time.Second
|
|
|
|
// Faire un test "rapide" (sous le seuil)
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
duration := timer.WarnIfSlow(threshold)
|
|
if duration >= threshold {
|
|
t.Errorf("Expected duration to be less than threshold %v, got %v", threshold, duration)
|
|
}
|
|
}
|
|
|
|
func TestTimer_Elapsed(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
|
|
// Attendre un peu
|
|
time.Sleep(20 * time.Millisecond)
|
|
|
|
elapsed := timer.Elapsed()
|
|
if elapsed < 20*time.Millisecond {
|
|
t.Errorf("Expected elapsed time to be at least 20ms, got %v", elapsed)
|
|
}
|
|
if elapsed > 100*time.Millisecond {
|
|
t.Errorf("Expected elapsed time to be less than 100ms, got %v", elapsed)
|
|
}
|
|
|
|
// Vérifier que Elapsed ne réinitialise pas le timer
|
|
time.Sleep(10 * time.Millisecond)
|
|
elapsed2 := timer.Elapsed()
|
|
if elapsed2 <= elapsed {
|
|
t.Errorf("Expected elapsed2 (%v) to be greater than elapsed (%v)", elapsed2, elapsed)
|
|
}
|
|
}
|
|
|
|
func TestTimer_Reset(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
|
|
// Attendre un peu
|
|
time.Sleep(20 * time.Millisecond)
|
|
elapsed1 := timer.Elapsed()
|
|
|
|
if elapsed1 < 20*time.Millisecond {
|
|
t.Errorf("Expected elapsed1 to be at least 20ms, got %v", elapsed1)
|
|
}
|
|
|
|
// Réinitialiser le timer
|
|
timer.Reset()
|
|
|
|
// Attendre un peu moins
|
|
time.Sleep(10 * time.Millisecond)
|
|
elapsed2 := timer.Elapsed()
|
|
|
|
// elapsed2 devrait être proche de 10ms (pas 30ms)
|
|
if elapsed2 >= elapsed1 {
|
|
t.Errorf("Expected elapsed2 (%v) to be less than elapsed1 (%v) after reset", elapsed2, elapsed1)
|
|
}
|
|
if elapsed2 > 50*time.Millisecond {
|
|
t.Errorf("Expected elapsed2 to be less than 50ms after reset, got %v", elapsed2)
|
|
}
|
|
}
|
|
|
|
func TestTimer_IntegrationExample(t *testing.T) {
|
|
// Exemple d'utilisation complète comme dans la documentation
|
|
timer := StartTimer(t)
|
|
defer timer.WarnIfSlow(5 * time.Second)
|
|
|
|
// Simuler une opération de test
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
duration := timer.Stop()
|
|
if duration < 10*time.Millisecond {
|
|
t.Errorf("Expected duration to be at least 10ms, got %v", duration)
|
|
}
|
|
}
|
|
|
|
func TestTimer_MultipleOperations(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
|
|
// Première opération
|
|
time.Sleep(10 * time.Millisecond)
|
|
elapsed1 := timer.Elapsed()
|
|
|
|
// Réinitialiser pour la deuxième opération
|
|
timer.Reset()
|
|
|
|
// Deuxième opération
|
|
time.Sleep(15 * time.Millisecond)
|
|
elapsed2 := timer.Elapsed()
|
|
|
|
if elapsed1 < 10*time.Millisecond {
|
|
t.Errorf("Expected elapsed1 to be at least 10ms, got %v", elapsed1)
|
|
}
|
|
if elapsed2 < 15*time.Millisecond {
|
|
t.Errorf("Expected elapsed2 to be at least 15ms, got %v", elapsed2)
|
|
}
|
|
// After reset, elapsed2 measures time since reset (15ms), elapsed1 measures time since start (10ms)
|
|
// elapsed2 should be greater than elapsed1 because it includes the reset time + 15ms sleep
|
|
// The test logic was incorrect - elapsed2 should be greater than elapsed1, not less
|
|
if elapsed2 <= elapsed1 {
|
|
t.Errorf("Expected elapsed2 (%v) to be greater than elapsed1 (%v) after reset and additional sleep", elapsed2, elapsed1)
|
|
}
|
|
}
|
|
|
|
func TestTimer_Stop_ReturnsCorrectDuration(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
|
|
sleepDuration := 25 * time.Millisecond
|
|
time.Sleep(sleepDuration)
|
|
|
|
duration := timer.Stop()
|
|
|
|
// Vérifier que la durée est raisonnable (au moins le temps de sleep)
|
|
if duration < sleepDuration {
|
|
t.Errorf("Expected duration to be at least %v, got %v", sleepDuration, duration)
|
|
}
|
|
// Vérifier qu'elle n'est pas trop grande (tolérance de 50ms)
|
|
if duration > sleepDuration+50*time.Millisecond {
|
|
t.Errorf("Expected duration to be close to %v, got %v", sleepDuration, duration)
|
|
}
|
|
}
|