code: def test_simple_class(self) -> None:
      class Foo(HasProps):
          x = Int(12)
          y = String("hello")
          z = List(Int, default=[1, 2, 3])
          zz = Dict(String, Int)
          s = Nullable(String(None))
  
      f = Foo()
      assert f.x == 12
      assert f.y == "hello"
      assert np.array_equal(np.array([1, 2, 3]), f.z)
      assert f.s is None
  
      assert {"x", "y", "z", "zz", "s"} == f.properties()
      with_defaults = f.properties_with_values(include_defaults=True)
      assert (
          dict(x=12, y="hello", z=[1, 2, 3], zz={}, s=None)
          == with_defaults
      )
      without_defaults = f.properties_with_values(
          include_defaults=False
      )
      assert dict() == without_defaults
  
      f.x = 18
      assert f.x == 18
  
      f.y = "bar"
      assert f.y == "bar"
  
      without_defaults = f.properties_with_values(
          include_defaults=False
      )
      assert dict(x=18, y="bar") == without_defaults
  
      f.z[0] = 100
  
      without_defaults = f.properties_with_values(
          include_defaults=False
      )
      assert dict(x=18, y="bar", z=[100, 2, 3]) == without_defaults
  
      f.zz = {"a": 10}
  
      without_defaults = f.properties_with_values(
          include_defaults=False
      )
      assert (
          dict(x=18, y="bar", z=[100, 2, 3], zz={"a": 10})
          == without_defaults
      )
  
imports: from __future__ import annotations
  import pytest
  import numpy
  from bokeh.core.has_props import HasProps, Local
  from bokeh.core.properties import Alias, Dict, Enum, Float, Instance, Int, List, NotSerialized, Nullable, NumberSpec, Override, Readonly, String, UnsetValueError
  from bokeh.model import Model
  from tests.support.util.api import verify_all
  import bokeh.core.properties
label_desc: Use image node_id 1 for calling the TestBasic obj's underlying member method code with example usage: obj.test_simple_class() without return types