assert_equal('string(19) "removed for display"',
        Kohana_Exception::dump("1a62761b836138c6198313911"));
    $this->assert_equal('string(14) "original value"',
        Kohana_Exception::dump("original value"));
  }
  public function safe_dump_test() {
    // Verify the delegation.
    $this->assert_equal('string(19) "removed for display"',
        Kohana_Exception::safe_dump("original value", "password"));
    $this->assert_equal('string(14) "original value"',
        Kohana_Exception::safe_dump("original value", "meow"));
  }
  public function sanitize_for_dump_match_key_test() {
    $this->assert_equal("removed for display",
        Kohana_Exception::_sanitize_for_dump("original value", "password", 5));
    $this->assert_equal("original value",
        Kohana_Exception::_sanitize_for_dump("original value", "meow", 5));
  }
  public function sanitize_for_dump_match_key_loosely_test() {
    $this->assert_equal("removed for display",
        Kohana_Exception::_sanitize_for_dump("original value", "this secret key", 5));
  }
  public function sanitize_for_dump_match_value_test() {
    // Looks like a hash / secret value.
    $this->assert_equal("removed for display",
        Kohana_Exception::_sanitize_for_dump("p$2a178b841c6391d6368f131", "meow", 5));
    $this->assert_equal("original value",
        Kohana_Exception::_sanitize_for_dump("original value", "meow", 5));
  }
  public function sanitize_for_dump_array_test() {
    $var = array("safe" => "original value 1",
                 "some hash" => "original value 2",
                 "three" => "2a3728788982938293b9292");
    $expected = array("safe" => "original value 1",
                      "some hash" => "removed for display",
                      "three" => "removed for display");
    $this->assert_equal($expected,
        Kohana_Exception::_sanitize_for_dump($var, "ignored", 5));
  }
  public function sanitize_for_dump_nested_array_test() {
    $var = array("safe" => "original value 1",
                 "safe 2" => array("some hash" => "original value 2"));
    $expected = array("safe" => "original value 1",
                      "safe 2" => array("some hash" => "removed for display"));
    $this->assert_equal($expected,
        Kohana_Exception::_sanitize_for_dump($var, "ignored", 5));
  }
  public function sanitize_for_dump_user_test() {
    $user = new User_Model();
    $user->name = "john";
    $user->hash = "value 1";
    $user->email = "value 2";
    $user->full_name = "value 3";
    $this->assert_equal('User_Model object for "john" - details omitted for display',
        Kohana_Exception::_sanitize_for_dump($user, "ignored", 5));
  }
  public function sanitize_for_dump_database_test() {
    $db = new Kohana_Exception_Test_Database(
        array("connection" => array("user" => "john", "name" => "gallery_3"),
              "cache" => array()));
    $this->assert_equal("Kohana_Exception_Test_Database object - details omitted for display",
        Kohana_Exception::_sanitize_for_dump($db, "ignored", 5));
  }
  public function sanitize_for_dump_nested_database_test() {
    $db = new Kohana_Exception_Test_Database(
        array("connection" => array("user" => "john", "name" => "gallery_3"),
              "cache" => array()));
    $var = array("some" => "foo",
                 "bar" => $db);
    $this->assert_equal(
        array("some" => "foo",
              "bar (type: Kohana_Exception_Test_Database)" =>
              "Kohana_Exception_Test_Database object - details omitted for display"),
        Kohana_Exception::_sanitize_for_dump($var, "ignored", 5));
  }
  public function sanitize_for_dump_object_test() {
    $obj = new Kohana_Exception_Test_Class();
    $obj->password = "original value";
    $expected = array("var_1" => "val 1",
                      "protected: var_2" => "val 2",
                      "private: var_3" => "val 3",
                      "protected: hash" => "removed for display",
                      "private: email_address" => "removed for display",
                      "password" => "removed for display");
    $this->assert_equal($expected,
        Kohana_Exception::_sanitize_for_dump($obj, "ignored", 5));
  }
  public function sanitize_for_dump_nested_object_test() {
    $user = new User_Model();
    $user->name = "john";
    $obj = new Kohana_Exception_Test_Class();
    $obj->meow = new Kohana_Exception_Test_Class();
    $obj->woof = "original value";
    $obj->foo = array("bar" => $user);
    $expected = array("var_1" => "val 1",
                      "protected: var_2" => "val 2",
                      "private: var_3" => "val 3",
                      "protected: hash" => "removed for display",
                      "private: email_address" => "removed for display",
                      "meow (type: Kohana_Exception_Test_Class)" =>
                          array("var_1" => "val 1",
                                "protected: var_2" => "val 2",
                                "private: var_3" => "val 3",
                                "protected: hash" => "removed for display",
                                "private: email_address" => "removed for display"),
                      "woof" => "original value",
                      "foo" => array("bar (type: User_Model)" =>
                                     'User_Model object for "john" - details omitted for display'));
    $this->assert_equal($expected,
        Kohana_Exception::_sanitize_for_dump($obj, "ignored", 5));
  }
}
class Kohana_Exception_Test_Database extends Database {
  function __construct($config) { parent::__construct($config); }
  public function connect() {}
  public function disconnect() {}
  public function set_charset($charset) {}
  public function query_execute($sql) {}
  public function escape($value) {}
  public function list_constraints($table) {}
  public function list_fields($table) {}
  public function list_tables() {}
}
class Kohana_Exception_Test_Class {
  public $var_1 = "val 1";
  protected $var_2 = "val 2";
  private $var_3 = "val 3";
  protected $hash = "val 4";
  private $email_address = "val 5";
  function __set($name, $val) {
    $this->$name = $val;
  }
}