File size: 2,400 Bytes
dd39c08
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import re

import gymnasium as gym
import pytest

from browsergym.core.registration import register_task
from browsergym.core.task import AbstractBrowserTask


class RegistrationTestTask(AbstractBrowserTask):
    @classmethod
    def get_task_id(cls):
        raise NotImplementedError

    def __init__(self, a: str = "", b: int = 0, c: bool = False, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.a = a
        self.b = b
        self.c = c

    def setup(self, page):
        return "", {}

    def teardown(self):
        pass

    def validate(self, page, chat_messages):
        return 0, True, "", {}


register_task("test_task", RegistrationTestTask)
register_task(
    "test_task_with_defaults",
    RegistrationTestTask,
    task_kwargs={"a": "new value"},
    default_task_kwargs={"b": 1},
)


def test_registration():

    with pytest.raises(ValueError):
        register_task(
            "test_task_forbidden",
            RegistrationTestTask,
            task_kwargs={"a": "new value"},
            default_task_kwargs={"a": "other value"},
        )

    env = gym.make("browsergym/test_task")

    assert env.unwrapped.task_kwargs == {}

    env.reset()
    env.unwrapped.task.a == ""
    env.unwrapped.task.b == 0
    env.unwrapped.task.c == False
    env.close()

    env = gym.make("browsergym/test_task", task_kwargs={"a": "other", "b": 1})

    assert env.unwrapped.task_kwargs == {"a": "other", "b": 1}

    env.reset()
    env.unwrapped.task.a == "other"
    env.unwrapped.task.b == 1
    env.unwrapped.task.c == False
    env.close()

    env = gym.make("browsergym/test_task_with_defaults")

    assert env.unwrapped.task_kwargs == {}

    env.reset()
    env.unwrapped.task.a == "new value"
    env.unwrapped.task.b == 1
    env.unwrapped.task.c == False
    env.close()

    env = gym.make("browsergym/test_task_with_defaults", task_kwargs={"b": 2})

    assert env.unwrapped.task_kwargs == {"b": 2}

    env.reset()
    env.unwrapped.task.a == "new value"
    env.unwrapped.task.b == 2
    env.unwrapped.task.c == False
    env.close()

    env = gym.make("browsergym/test_task_with_defaults", task_kwargs={"a": "other"})

    assert env.unwrapped.task_kwargs == {"a": "other"}

    with pytest.raises(
        expected_exception=ValueError,
        match=re.compile("Illegal attempt to override frozen parameters"),
    ):
        env.reset()