Files
questshock/modding/hacked/ss1/world/ManifestEntry_test.go
T

93 lines
3.2 KiB
Go

package world_test
import (
"fmt"
"testing"
"github.com/inkyblackness/hacked/ss1/resource"
"github.com/inkyblackness/hacked/ss1/world"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
)
type ManifestEntrySuite struct {
suite.Suite
entry *world.ManifestEntry
finder resource.Selector
}
func TestManifestEntrySuite(t *testing.T) {
suite.Run(t, new(ManifestEntrySuite))
}
func (suite *ManifestEntrySuite) SetupTest() {
suite.entry = new(world.ManifestEntry)
}
func (suite *ManifestEntrySuite) TestResourceReturnsErrorIfNothingFound() {
suite.whenViewingResource(resource.LangAny)
suite.thenResourceViewShouldNotBeAvailable(1234)
}
func (suite *ManifestEntrySuite) TestResourceReturnsViewIfMatched() {
suite.givenLocalizedResources(resource.LangAny, 1000, [][]byte{{0x01}})
suite.whenViewingResource(resource.LangAny)
suite.thenResourceViewShouldBeAvailable(1000)
}
func (suite *ManifestEntrySuite) TestResourceConsidersResourcesWithLanguageAnyWhenLookingForSpecific() {
suite.givenLocalizedResources(resource.LangAny, 1000, [][]byte{{0x01}})
suite.whenViewingResource(resource.LangDefault)
suite.thenResourceViewShouldBeAvailable(1000)
}
func (suite *ManifestEntrySuite) TestResourceConsidersResourcesWithSpecificLanguage() {
suite.givenLocalizedResources(resource.LangFrench, 1000, [][]byte{{0x01}})
suite.whenViewingResource(resource.LangFrench)
suite.thenResourceViewShouldBeAvailable(1000)
}
func (suite *ManifestEntrySuite) TestResourceIgnoresResourcesWithSpecificLanguageWhenLookingForAny() {
suite.givenLocalizedResources(resource.LangFrench, 1000, [][]byte{{0x01}})
suite.whenViewingResource(resource.LangAny)
suite.thenResourceViewShouldNotBeAvailable(1000)
}
func (suite *ManifestEntrySuite) TestResourceIgnoresResourcesWithSpecificLanguageWhenLookingForDifferentLanguage() {
suite.givenLocalizedResources(resource.LangFrench, 1000, [][]byte{{0x01}})
suite.whenViewingResource(resource.LangDefault)
suite.thenResourceViewShouldNotBeAvailable(1000)
suite.whenViewingResource(resource.LangGerman)
suite.thenResourceViewShouldNotBeAvailable(1000)
}
func (suite *ManifestEntrySuite) givenLocalizedResources(lang resource.Language, id int, data [][]byte) {
var store resource.Store
_ = store.Put(resource.ID(id), resource.Resource{
Blocks: resource.BlocksFrom(data),
})
suite.entry.Resources = append(suite.entry.Resources, resource.LocalizedResources{
Language: lang,
Viewer: store,
})
}
func (suite *ManifestEntrySuite) whenViewingResource(lang resource.Language) {
suite.finder = suite.entry.LocalizedResources(lang)
}
func (suite *ManifestEntrySuite) thenResourceViewShouldNotBeAvailable(id int) {
view, err := suite.finder.Select(resource.ID(id))
assert.Error(suite.T(), err, fmt.Sprintf("Error expected finding resource %v", id))
assert.Nil(suite.T(), view, fmt.Sprintf("No view expected finding resource %v", id))
}
func (suite *ManifestEntrySuite) thenResourceViewShouldBeAvailable(id int) {
view, err := suite.finder.Select(resource.ID(id))
require.Nil(suite.T(), err, fmt.Sprintf("No error expected finding resource %v", id))
assert.NotNil(suite.T(), view, fmt.Sprintf("View expected for resource %v", id))
}