code: def test_init(self):
      from vispy.gloo.program import VertexShader, FragmentShader
  
      # Test ok init, no shaders
      program = Program()
      assert program._user_variables == {}
      assert program._code_variables == {}
      assert program._pending_variables == {}
      assert program.shaders[0] is None
      assert program.shaders[1] is None
  
      # Test ok init, with shader
      program = Program("A", "B")
      assert isinstance(program.shaders[0], VertexShader)
      assert program.shaders[0].code == "A"
      assert isinstance(program.shaders[1], FragmentShader)
      assert program.shaders[1].code == "B"
  
      # False inits
      self.assertRaises(ValueError, Program, "A", None)
      self.assertRaises(ValueError, Program, None, "B")
      self.assertRaises(ValueError, Program, 3, "B")
      self.assertRaises(ValueError, Program, 3, None)
      self.assertRaises(ValueError, Program, "A", 3)
      self.assertRaises(ValueError, Program, None, 3)
      self.assertRaises(ValueError, Program, "", "")
      self.assertRaises(ValueError, Program, "foo", "")
      self.assertRaises(ValueError, Program, "", "foo")
  
imports: import unittest
  import numpy
  from vispy import gloo, app
  from vispy.gloo.program import Program
  from vispy.testing import run_tests_if_main, requires_application
  from vispy.gloo.context import set_current_canvas, forget_canvas
label_desc: Use image node_id 1 for calling the ProgramTest obj's underlying member method code with example usage: obj.test_init() without return types