Fix styled switch-back repaint

This commit is contained in:
2026-05-14 17:20:23 +01:00
parent d5ee50fa65
commit 36e738b5c6
12 changed files with 423 additions and 62 deletions

View File

@@ -3,6 +3,7 @@ package harness
import (
"encoding/json"
"fmt"
"regexp"
"strings"
)
@@ -74,6 +75,43 @@ func runStep(s *Session, step Step, results map[string]json.RawMessage) error {
return fmt.Errorf("screen does not contain %q:\n%s", step.Contains, screen)
}
return nil
case "assert_not_contains":
screen, err := s.Screen()
if err != nil {
return err
}
if strings.Contains(screen, step.Contains) {
return fmt.Errorf("screen contains %q:\n%s", step.Contains, screen)
}
return nil
case "mark_raw":
if step.SaveAs == "" {
return fmt.Errorf("mark_raw requires save_as")
}
raw, err := json.Marshal(s.RawOffset())
if err != nil {
return err
}
results[step.SaveAs] = raw
return nil
case "assert_raw_since_regex":
raw, ok := results[step.From]
if !ok {
return fmt.Errorf("no saved result %q", step.From)
}
var offset int
if err := json.Unmarshal(raw, &offset); err != nil {
return fmt.Errorf("saved result %q is not a raw offset: %w", step.From, err)
}
re, err := regexp.Compile(step.Regex)
if err != nil {
return err
}
b := s.RawSince(offset)
if !re.Match(b) {
return fmt.Errorf("raw output since %q does not match %q:\n%s", step.From, step.Regex, string(b))
}
return nil
case "assert_regex":
return s.WaitForRegex(step.Regex, timeoutMS(step.TimeoutMS))
case "wait_text":