93 lines
3.2 KiB
Go
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))
|
|
}
|