// +build !go1.15

package qtls

import (
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

type target struct {
	Name    string
	Version string

	callback func(label string, length int) error
}

type renamedField struct {
	NewName string
	Version string

	callback func(label string, length int) error
}

type renamedPrivateField struct {
	Name    string
	Version string

	cb func(label string, length int) error
}

type additionalField struct {
	Name    string
	Version string

	callback func(label string, length int) error
	secret   []byte
}

type interchangedFields struct {
	Version string
	Name    string

	callback func(label string, length int) error
}

type renamedCallbackFunctionParams struct { // should be equivalent
	Name    string
	Version string

	callback func(newLabel string, length int) error
}

var _ = Describe("Unsafe checks", func() {
	It("detects if an unsafe conversion is safe", func() {
		Expect(structsEqual(&target{}, &target{})).To(BeTrue())
		Expect(structsEqual(&target{}, &renamedField{})).To(BeFalse())
		Expect(structsEqual(&target{}, &renamedPrivateField{})).To(BeFalse())
		Expect(structsEqual(&target{}, &additionalField{})).To(BeFalse())
		Expect(structsEqual(&target{}, &interchangedFields{})).To(BeFalse())
		Expect(structsEqual(&target{}, &renamedCallbackFunctionParams{})).To(BeTrue())
	})
})
