package ctime

import (
	"io/ioutil"
	"os"
	"testing"
	"time"
)

func TestCreated(t *testing.T) {
	before := time.Now()

	fileA, err := ioutil.TempFile("", "ctime-test-")
	if err != nil {
		t.Error(err)
	}
	defer os.Remove(fileA.Name())

	fileB, err := ioutil.TempFile("", "ctime-test-")
	if err != nil {
		t.Error(err)
	}
	defer os.Remove(fileB.Name())

	after := time.Now()

	infoA, err := fileA.Stat()
	if err != nil {
		t.Error(err)
	}

	err = fileA.Close()
	if err != nil {
		t.Error(err)
	}

	infoB, err := fileB.Stat()
	if err != nil {
		t.Error(err)
	}

	err = fileB.Close()
	if err != nil {
		t.Error(err)
	}

	createdA := Created(infoA)
	beforeToCreateA := createdA.Sub(before)
	if beforeToCreateA.Nanoseconds() < -1000000000 {
		t.Errorf("created file A %s is %v nanoseconds before %s", createdA, -beforeToCreateA.Nanoseconds(), before)
	}

	createdB := Created(infoB)
	createAToCreateB := createdB.Sub(createdA)
	if createAToCreateB.Nanoseconds() < 0 {
		t.Errorf("created file B %s is %v nanoseconds before file A %s", createdB, -createAToCreateB.Nanoseconds(), createdA)
	}

	createBToAfter := after.Sub(createdB)
	if createBToAfter.Nanoseconds() < 0 {
		t.Errorf("created file B %s is %v nanoseconds after %s", createdB, -createBToAfter.Nanoseconds(), after)
	}
}
