package ui import "testing" // A real (trimmed) KeyguardServiceDelegate block from `dumpsys window`. const keyguardLockedDump = `WINDOW MANAGER POLICY STATE (dumpsys window policy) mSafeMode=false mSystemReady=true mKeyguardOccluded=false mPendingKeyguardOccluded=false KeyguardServiceDelegate showing=true inputRestricted=true occluded=false trusted=false simSecure=false dreaming=false systemReady=true deviceHasKeyguard=true enabled=true userId=0 bootCompleted=true screenState=SCREEN_STATE_ON interactiveState=INTERACTIVE_STATE_AWAKE Looper state: Looper (android.ui, tid 22) {4c5c23e} ` const keyguardUnlockedDump = `WINDOW MANAGER POLICY STATE (dumpsys window policy) mKeyguardOccluded=false mPendingKeyguardOccluded=false KeyguardServiceDelegate showing=false inputRestricted=false occluded=false trusted=false simSecure=false dreaming=false systemReady=true deviceHasKeyguard=true enabled=true userId=0 bootCompleted=true screenState=SCREEN_STATE_ON interactiveState=INTERACTIVE_STATE_AWAKE Looper state: Looper (android.ui, tid 22) {4c5c23e} ` func TestKeyguardShowingParsesTheDelegateBlock(t *testing.T) { showing, err := keyguardShowing(keyguardLockedDump) if err != nil { t.Fatalf("keyguardShowing: %v", err) } if !showing { t.Fatal("want showing=true") } showing, err = keyguardShowing(keyguardUnlockedDump) if err != nil { t.Fatalf("keyguardShowing: %v", err) } if showing { t.Fatal("want showing=false") } } func TestKeyguardShowingRejectsAnUnparsableDump(t *testing.T) { // Acting on a phone whose lock state is unknown is not allowed. if _, err := keyguardShowing("dumpsys window: service not found\n"); err == nil { t.Fatal("expected an error when the delegate block is missing") } } func TestKeyguardShowingReadsIsKeyguardShowing(t *testing.T) { dump := " KeyguardServiceDelegate\n showing=false\n mDisableSecureWindows=false\n isKeyguardShowing=true\n" showing, err := keyguardShowing(dump) if err != nil { t.Fatalf("keyguardShowing: %v", err) } if !showing { t.Fatal("want showing=true from isKeyguardShowing") } }