package common

import (
	"testing"
	"github.com/stretchr/testify/assert"
)

func TestDTCStatusByte(t *testing.T){
	fakeDTC := DTC_ECU{}

	fakeDTC.StatusByte = 0x09
	dtcArrayCheck(t, fakeDTC, []DTCStatusByteMeaning{Bit4, Bit7})

	fakeDTC.StatusByte = 0x00
	dtcArrayCheck(t, fakeDTC, []DTCStatusByteMeaning{})

	fakeDTC.StatusByte = 0x2F
	dtcArrayCheck(t, fakeDTC, []DTCStatusByteMeaning{Bit7, Bit6, Bit5, Bit4, Bit2})
}

func dtcArrayCheck(t *testing.T, fakeDTC DTC_ECU, expected []DTCStatusByteMeaning){
	statuses := fakeDTC.DTCStatusByteMeaning()
	for _, exp := range expected{
		found := false
		for _, rec := range statuses{
			if rec == exp{
				found = true
				break
			}
		}
		if !found{
			t.Logf("Expected %s but did not find", exp)
			t.Fail()
		}
	}

	for _, rec := range statuses{
		found := false
		for _, exp := range expected{
			if rec == exp{
				found = true
				break
			}
		}
		if !found{
			t.Logf("Extra Result %s", rec)
			t.Fail()
		}
	}
}

func TestCacheKey(t *testing.T) {
	fakeDTC := DTC_ECU{
		VIN: "3FAFP13P71R199432",
		ECU: "ACU",
		TroubleCode: 8388881,
	}
	actual := fakeDTC.CacheKey()
	expected := "3FAFP13P71R199432:ACU:8388881"

	assert.Equal(t, actual, expected)
}
