2019-04-06 20:32:02 +00:00
|
|
|
package chromedp
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestTargets(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
// Start one browser with one tab.
|
2019-04-07 11:36:48 +00:00
|
|
|
ctx1, cancel1 := NewContext(context.Background())
|
|
|
|
defer cancel1()
|
2019-04-06 20:32:02 +00:00
|
|
|
if err := Run(ctx1); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2019-04-07 11:36:48 +00:00
|
|
|
wantTargets := func(ctx context.Context, want int) {
|
2019-04-07 12:17:15 +00:00
|
|
|
t.Helper()
|
2019-04-07 11:36:48 +00:00
|
|
|
infos, err := Targets(ctx)
|
2019-04-06 20:32:02 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2019-04-07 11:36:48 +00:00
|
|
|
if got := len(infos); want != got {
|
2019-04-06 20:32:02 +00:00
|
|
|
t.Fatalf("want %d targets, got %d", want, got)
|
|
|
|
}
|
|
|
|
}
|
2019-04-07 11:36:48 +00:00
|
|
|
wantTargets(ctx1, 1)
|
2019-04-06 20:32:02 +00:00
|
|
|
|
2019-04-07 11:36:48 +00:00
|
|
|
// Start a second tab on the same browser.
|
|
|
|
ctx2, cancel2 := NewContext(ctx1)
|
|
|
|
defer cancel2()
|
2019-04-06 20:32:02 +00:00
|
|
|
if err := Run(ctx2); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2019-04-07 11:36:48 +00:00
|
|
|
wantTargets(ctx2, 2)
|
2019-04-06 20:32:02 +00:00
|
|
|
|
|
|
|
// The first context should also see both targets.
|
2019-04-07 11:36:48 +00:00
|
|
|
wantTargets(ctx1, 2)
|
2019-04-07 12:17:15 +00:00
|
|
|
|
|
|
|
// Cancelling the second context should close the second tab alone.
|
|
|
|
cancel2()
|
|
|
|
wantTargets(ctx1, 1)
|
2019-04-07 16:49:53 +00:00
|
|
|
|
|
|
|
// We used to have a bug where Run would reset the first context as if
|
|
|
|
// it weren't the first, breaking its cancellation.
|
|
|
|
if err := Run(ctx1); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2019-04-06 20:32:02 +00:00
|
|
|
}
|