package chromedp import ( "context" "os" "testing" ) func TestExecAllocator(t *testing.T) { t.Parallel() allocCtx, cancel := NewExecAllocator(context.Background(), allocOpts...) defer cancel() // TODO: test that multiple child contexts are run in different // processes and browsers. taskCtx, cancel := NewContext(allocCtx) defer cancel() want := "insert" var got string if err := Run(taskCtx, Navigate(testdataDir+"/form.html"), Text("#foo", &got, ByID), ); err != nil { t.Fatal(err) } if got != want { t.Fatalf("wanted %q, got %q", want, got) } cancel() tempDir := FromContext(taskCtx).Browser.userDataDir if _, err := os.Lstat(tempDir); !os.IsNotExist(err) { t.Fatalf("temporary user data dir %q not deleted", tempDir) } } func TestExecAllocatorCancelParent(t *testing.T) { t.Parallel() allocCtx, allocCancel := NewExecAllocator(context.Background(), allocOpts...) defer allocCancel() // TODO: test that multiple child contexts are run in different // processes and browsers. taskCtx, _ := NewContext(allocCtx) if err := Run(taskCtx); err != nil { t.Fatal(err) } // Canceling the pool context should stop all browsers too. allocCancel() tempDir := FromContext(taskCtx).Browser.userDataDir if _, err := os.Lstat(tempDir); !os.IsNotExist(err) { t.Fatalf("temporary user data dir %q not deleted", tempDir) } } func TestSkipNewContext(t *testing.T) { ctx, cancel := NewExecAllocator(context.Background(), allocOpts...) defer cancel() // Using the allocator context directly (without calling NewContext) // should be an immediate error. err := Run(ctx, Navigate(testdataDir+"/form.html")) want := ErrInvalidContext if err != want { t.Fatalf("want error to be %q, got %q", want, err) } }