mirror of
https://github.com/divan/txqr.git
synced 2026-09-07 10:28:23 +08:00
Add test setup
This commit is contained in:
@@ -18,6 +18,9 @@ const (
|
||||
type Session struct {
|
||||
state SessionState
|
||||
config SessionConfig
|
||||
|
||||
tests []*testSetup
|
||||
idx int // current test index
|
||||
}
|
||||
|
||||
// NewSession inits new test session.
|
||||
@@ -28,6 +31,56 @@ func NewSession() *Session {
|
||||
}
|
||||
}
|
||||
|
||||
// StartNext starts next round of testing. It returns
|
||||
// next untested parameters for QR code.
|
||||
func (s *Session) StartNext() (*testSetup, bool) {
|
||||
if s.state == StateNew {
|
||||
s.state = StateStarted
|
||||
|
||||
// generate parameters set, so they can't be changed during test
|
||||
s.tests = s.generateTestsSetup()
|
||||
}
|
||||
|
||||
if s.idx == len(s.tests) {
|
||||
s.state = StateFinished
|
||||
return nil, false
|
||||
}
|
||||
|
||||
test := s.tests[s.idx]
|
||||
s.idx++
|
||||
return test, true
|
||||
}
|
||||
|
||||
func (s *Session) generateTestsSetup() []*testSetup {
|
||||
var ret []*testSetup
|
||||
for _, lvl := range AllQRLevels {
|
||||
if s.config.Levels[lvl] == false {
|
||||
continue
|
||||
}
|
||||
for fps := s.config.StartFPS; fps < s.config.StopFPS; fps++ {
|
||||
for sz := s.config.StartSize; sz < s.config.StopSize; sz += s.config.SizeStep {
|
||||
ret = append(ret, newTestSetup(fps, sz, lvl))
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
// testSetup represents setup parameters for the single test round.
|
||||
type testSetup struct {
|
||||
FPS int
|
||||
Size int
|
||||
Level qr.RecoveryLevel
|
||||
}
|
||||
|
||||
func newTestSetup(fps, sz int, lvl qr.RecoveryLevel) *testSetup {
|
||||
return &testSetup{
|
||||
FPS: fps,
|
||||
Size: sz,
|
||||
Level: lvl,
|
||||
}
|
||||
}
|
||||
|
||||
// SessionConfig holds configuration values for initiating the session.
|
||||
type SessionConfig struct {
|
||||
StartFPS, StopFPS int // FPS of QR animation
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package main
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestGenerateTests(t *testing.T) {
|
||||
sess := NewSession()
|
||||
got := sess.generateTestsSetup()
|
||||
expectedLen := 988
|
||||
if len(got) != expectedLen {
|
||||
t.Fatalf("Expected len to be %d, but got %d", expectedLen, got)
|
||||
}
|
||||
}
|
||||
@@ -42,7 +42,7 @@ func (w *WSClient) talkToBackend() {
|
||||
buf := make([]byte, 1024)
|
||||
n, err := conn.Read(buf)
|
||||
if err != nil {
|
||||
log.Println("[ERROR] Reading from websocket: %v", err)
|
||||
log.Printf("[ERROR] Reading from websocket: %v", err)
|
||||
break
|
||||
}
|
||||
|
||||
@@ -65,7 +65,9 @@ func (w *WSClient) processWSCommand(data []byte) {
|
||||
w.app.SetConnected(true)
|
||||
w.sendMsg(&ws.UIResponse{Type: ws.Ack})
|
||||
case ws.CmdStartNext:
|
||||
log.Println("Got start_next")
|
||||
log.Println("Got start_nextx")
|
||||
setup, _ := w.app.session.StartNext()
|
||||
log.Println("Config:", setup)
|
||||
// start animation
|
||||
case ws.CmdResult:
|
||||
log.Println("Got result")
|
||||
|
||||
Reference in New Issue
Block a user