|
|
@@ -0,0 +1,121 @@
|
|
|
+// package mock_kernel -- мок-ядро библиотеки
|
|
|
+package mock_kernel
|
|
|
+
|
|
|
+import (
|
|
|
+ "context"
|
|
|
+ "fmt"
|
|
|
+
|
|
|
+ "p78git.ddns.net/svi/libtui/alias"
|
|
|
+ "p78git.ddns.net/svi/libtui/lib/color"
|
|
|
+ "p78git.ddns.net/svi/libtui/lib/cursor"
|
|
|
+ "p78git.ddns.net/svi/libtui/lib/kernel/lst_drawer"
|
|
|
+ "p78git.ddns.net/svi/libtui/lib/line"
|
|
|
+ "p78git.ddns.net/svi/libtui/lib/pos"
|
|
|
+ "p78git.ddns.net/svi/libtui/lib/tui_obj"
|
|
|
+ "p78git.ddns.net/svi/libtui/types"
|
|
|
+)
|
|
|
+
|
|
|
+// MockKernel -- мок-ядро библиотеки
|
|
|
+//
|
|
|
+// ВНИМАНИЕ!!!
|
|
|
+// Screen_ -- присваивать руками
|
|
|
+type MockKernel struct {
|
|
|
+ *tui_obj.TuiObj
|
|
|
+ Params_ map[string]string
|
|
|
+ ctxBg context.Context // Неотменяемый контекст
|
|
|
+ ctx context.Context // Отменяесый контекст
|
|
|
+ fnCancel func() // Функция отмены контекста
|
|
|
+ Screen_ types.IScreen // Объект приложения
|
|
|
+ Cursor_ *cursor.Cursor
|
|
|
+ lstDraw *lst_drawer.LstDrawer // Список объектов для отрисовки
|
|
|
+}
|
|
|
+
|
|
|
+// NewMockKernel -- возвращаетновое мок-ядро
|
|
|
+func NewMockKernel(params map[string]string) (*MockKernel, error) {
|
|
|
+ if params == nil {
|
|
|
+ params = make(map[string]string)
|
|
|
+ }
|
|
|
+ strErr := params["kern_err"]
|
|
|
+ if strErr != "" {
|
|
|
+ return nil, fmt.Errorf("NewMockKernel(): kern_err not empty")
|
|
|
+ }
|
|
|
+ ctxBg := context.Background()
|
|
|
+ ctx, fn := context.WithCancel(ctxBg)
|
|
|
+ sf := &MockKernel{
|
|
|
+ Params_: params,
|
|
|
+ ctxBg: ctxBg,
|
|
|
+ fnCancel: fn,
|
|
|
+ ctx: ctx,
|
|
|
+ }
|
|
|
+ _ = types.IKernel(sf)
|
|
|
+ var err error
|
|
|
+ sf.Cursor_, err = cursor.NewCursor(sf)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("NewMockKernel(): in create ICursor, err=\n\t%w", err)
|
|
|
+ }
|
|
|
+ return sf, nil
|
|
|
+}
|
|
|
+
|
|
|
+// Run -- запускает объект приложения в работу
|
|
|
+func (sf *MockKernel) Run() error {
|
|
|
+ sf.Screen_.Run()
|
|
|
+ <-sf.ctx.Done()
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// Screen -- возвращает объект экрана
|
|
|
+func (sf *MockKernel) Screen() types.IScreen {
|
|
|
+ return sf.Screen_
|
|
|
+}
|
|
|
+
|
|
|
+// CancelApp -- отменяет контекст ядра
|
|
|
+func (sf *MockKernel) CancelApp() {
|
|
|
+ sf.fnCancel()
|
|
|
+}
|
|
|
+
|
|
|
+// Ctx -- возвращает контекст ядра
|
|
|
+func (sf *MockKernel) Ctx() context.Context {
|
|
|
+ return sf.ctx
|
|
|
+}
|
|
|
+
|
|
|
+// Cursor -- возвращает курсор приложения
|
|
|
+func (sf *MockKernel) Cursor() types.ICursor {
|
|
|
+ return sf.Cursor_
|
|
|
+}
|
|
|
+
|
|
|
+// Draw -- отрисовывает приложение
|
|
|
+func (sf *MockKernel) Draw() {
|
|
|
+ sf.lstDraw.Draw()
|
|
|
+ sf.Cursor_.Draw()
|
|
|
+}
|
|
|
+
|
|
|
+// MakeLine -- создаёт новую линию
|
|
|
+func (sf *MockKernel) MakeLine(beg, end types.IPos, color types.IColor) (types.ILine, error) {
|
|
|
+ line, err := line.NewLine(sf, beg, end, color)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("MockKernel.MakeLine(); in make ILine, err=\n\t%w", err)
|
|
|
+ }
|
|
|
+ if err := sf.lstDraw.Add(line); err != nil {
|
|
|
+ return nil, fmt.Errorf("MockKernel.MakeLine(); in add ILine to LstDrawer, err=\n\t%w", err)
|
|
|
+ }
|
|
|
+ return line, nil
|
|
|
+}
|
|
|
+
|
|
|
+// MakePos -- создаёт новую позицию
|
|
|
+func (sf *MockKernel) MakePos(posX alias.PosX, posY alias.PosY) types.IPos {
|
|
|
+ pos := pos.NewPos()
|
|
|
+ pos.Set(posX, posY)
|
|
|
+ return pos
|
|
|
+}
|
|
|
+
|
|
|
+// MakeColor -- создаёт новый цвет
|
|
|
+func (sf *MockKernel) MakeColor(r, g, b uint8) types.IColor {
|
|
|
+ color := color.NewColor()
|
|
|
+ color.Set(r, g, b)
|
|
|
+ return color
|
|
|
+}
|
|
|
+
|
|
|
+// Params -- возвращает словарь параметров
|
|
|
+func (sf *MockKernel) Params() map[string]string {
|
|
|
+ return sf.Params_
|
|
|
+}
|