code: def test_basic(self):
      env = GymEnvWithInfo()
      env = gym_wrapper.GymWrapper(env)
      observer = env_info.EnvInfoObserver()
      timestep = env.reset()
      observer.observe_first(env, timestep)
      for _ in range(20):
          action = np.zeros((3,))
          timestep = env.step(action)
          observer.observe(env, timestep, action)
      metrics = observer.get_metrics()
      self.assertLen(metrics, 3)
      np.testing.assert_equal(metrics["found_checkpoint"], 2)
      np.testing.assert_equal(metrics["picked_up_an_apple"], 1)
      np.testing.assert_equal(metrics["survival_bonus"], 20)
  
file_path: acme/acme/utils/observers/env_info_test.py
imports: from acme.utils.observers import env_info
  from acme.wrappers import gym_wrapper
  import gym
  from gym import spaces
  import numpy
  from absl.testing import absltest
label_desc: Use image node_id 1 for calling the ActionNormTest obj's underlying member method code with example usage: obj.test_basic() without return types