diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-28 01:07:51 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-28 01:07:51 +0900 |
| commit | b14690aa77b3d5f86c4d1b1965675d6d82789e32 (patch) | |
| tree | 5765f705fd69dae7a65a0666451ac71a729a6aa8 /internal/app/app_test.go | |
| parent | d0b6852cd7db2bb1214c3267719d3ac108c0a53e (diff) | |
internal/app: remove seal interface
This further cleans up the package for the restructure.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/app/app_test.go')
| -rw-r--r-- | internal/app/app_test.go | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/internal/app/app_test.go b/internal/app/app_test.go new file mode 100644 index 00000000..8b96cfba --- /dev/null +++ b/internal/app/app_test.go @@ -0,0 +1,106 @@ +package app_test + +import ( + "encoding/json" + "io/fs" + "reflect" + "testing" + "time" + + "hakurei.app/container" + "hakurei.app/hst" + "hakurei.app/internal/app" + "hakurei.app/internal/app/state" + "hakurei.app/internal/hlog" + "hakurei.app/internal/sys" + "hakurei.app/system" +) + +type sealTestCase struct { + name string + os sys.State + config *hst.Config + id state.ID + wantSys *system.I + wantContainer *container.Params +} + +func TestApp(t *testing.T) { + testCases := append(testCasesPd, testCasesNixos...) + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + a := app.NewWithID(tc.id, tc.os) + var ( + gotSys *system.I + gotContainer *container.Params + ) + if !t.Run("seal", func(t *testing.T) { + if sa, err := a.Seal(tc.config); err != nil { + hlog.PrintBaseError(err, "got generic error:") + t.Errorf("Seal: error = %v", err) + return + } else { + gotSys, gotContainer = app.AppIParams(a, sa) + } + }) { + return + } + + t.Run("compare sys", func(t *testing.T) { + if !gotSys.Equal(tc.wantSys) { + t.Errorf("Seal: sys = %#v, want %#v", + gotSys, tc.wantSys) + } + }) + + t.Run("compare params", func(t *testing.T) { + if !reflect.DeepEqual(gotContainer, tc.wantContainer) { + t.Errorf("seal: params =\n%s\n, want\n%s", + mustMarshal(gotContainer), mustMarshal(tc.wantContainer)) + } + }) + }) + } +} + +func mustMarshal(v any) string { + if b, err := json.Marshal(v); err != nil { + panic(err.Error()) + } else { + return string(b) + } +} + +func stubDirEntries(names ...string) (e []fs.DirEntry, err error) { + e = make([]fs.DirEntry, len(names)) + for i, name := range names { + e[i] = stubDirEntryPath(name) + } + return +} + +type stubDirEntryPath string + +func (p stubDirEntryPath) Name() string { return string(p) } +func (p stubDirEntryPath) IsDir() bool { panic("attempted to call IsDir") } +func (p stubDirEntryPath) Type() fs.FileMode { panic("attempted to call Type") } +func (p stubDirEntryPath) Info() (fs.FileInfo, error) { panic("attempted to call Info") } + +type stubFileInfoMode fs.FileMode + +func (s stubFileInfoMode) Name() string { panic("attempted to call Name") } +func (s stubFileInfoMode) Size() int64 { panic("attempted to call Size") } +func (s stubFileInfoMode) Mode() fs.FileMode { return fs.FileMode(s) } +func (s stubFileInfoMode) ModTime() time.Time { panic("attempted to call ModTime") } +func (s stubFileInfoMode) IsDir() bool { panic("attempted to call IsDir") } +func (s stubFileInfoMode) Sys() any { panic("attempted to call Sys") } + +type stubFileInfoIsDir bool + +func (s stubFileInfoIsDir) Name() string { panic("attempted to call Name") } +func (s stubFileInfoIsDir) Size() int64 { panic("attempted to call Size") } +func (s stubFileInfoIsDir) Mode() fs.FileMode { panic("attempted to call Mode") } +func (s stubFileInfoIsDir) ModTime() time.Time { panic("attempted to call ModTime") } +func (s stubFileInfoIsDir) IsDir() bool { return bool(s) } +func (s stubFileInfoIsDir) Sys() any { panic("attempted to call Sys") } |
