mirror of
https://github.com/launchbadge/sqlx
synced 2024-09-20 22:31:56 +00:00
add unit tests for DatabaseError
downcasting
This commit is contained in:
parent
673f133cab
commit
6e3fa49ad5
5 changed files with 74 additions and 2 deletions
|
@ -43,3 +43,22 @@ impl From<MySqlError> for crate::Error {
|
|||
crate::Error::Database(Box::new(err))
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_error_downcasting() {
|
||||
let error = MySqlError(ErrPacket {
|
||||
error_code: 0xABCD,
|
||||
sql_state: None,
|
||||
error_message: "".into()
|
||||
});
|
||||
|
||||
let error = crate::Error::from(error);
|
||||
|
||||
let db_err = match error {
|
||||
crate::Error::Database(db_err) => db_err,
|
||||
e => panic!("expected crate::Error::Database, got {:?}", e)
|
||||
};
|
||||
|
||||
assert_eq!(db_err.downcast_ref::<MySqlError>().0.error_code, 0xABCD);
|
||||
assert_eq!(db_err.downcast::<MySqlError>().0.error_code, 0xABCD);
|
||||
}
|
|
@ -63,3 +63,38 @@ impl From<PgError> for crate::Error {
|
|||
crate::Error::Database(Box::new(err))
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_error_downcasting() {
|
||||
use super::protocol::Severity;
|
||||
|
||||
let error = PgError(Response {
|
||||
severity: Severity::Panic,
|
||||
code: "".into(),
|
||||
message: "".into(),
|
||||
detail: None,
|
||||
hint: None,
|
||||
position: None,
|
||||
internal_position: None,
|
||||
internal_query: None,
|
||||
where_: None,
|
||||
schema: None,
|
||||
table: None,
|
||||
column: None,
|
||||
data_type: None,
|
||||
constraint: None,
|
||||
file: None,
|
||||
line: None,
|
||||
routine: None
|
||||
});
|
||||
|
||||
let error = crate::Error::from(error);
|
||||
|
||||
let db_err = match error {
|
||||
crate::Error::Database(db_err) => db_err,
|
||||
e => panic!("expected Error::Database, got {:?}", e)
|
||||
};
|
||||
|
||||
assert_eq!(db_err.downcast_ref::<PgError>().0.severity, Severity::Panic);
|
||||
assert_eq!(db_err.downcast::<PgError>().0.severity, Severity::Panic);
|
||||
}
|
|
@ -60,7 +60,7 @@ pub(crate) use message::Message;
|
|||
pub(crate) use notification_response::NotificationResponse;
|
||||
pub(crate) use parameter_description::ParameterDescription;
|
||||
pub(crate) use ready_for_query::ReadyForQuery;
|
||||
pub(crate) use response::Response;
|
||||
pub(crate) use response::{Response, Severity};
|
||||
pub(crate) use row_description::{Field, RowDescription};
|
||||
|
||||
pub(crate) trait Write {
|
||||
|
|
|
@ -3,7 +3,7 @@ use std::str::{self, FromStr};
|
|||
|
||||
use crate::postgres::database::Postgres;
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
pub(crate) enum Severity {
|
||||
Panic,
|
||||
Fatal,
|
||||
|
|
|
@ -71,3 +71,21 @@ impl From<SqliteError> for crate::Error {
|
|||
crate::Error::Database(Box::new(err))
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_error_downcasting() {
|
||||
let error = SqliteError {
|
||||
code: "SQLITE_ERR_SOMETHING".into(),
|
||||
message: "Some hypothetical error message".into()
|
||||
};
|
||||
|
||||
let error = crate::Error::from(error);
|
||||
|
||||
let db_err = match error {
|
||||
crate::Error::Database(db_err) => db_err,
|
||||
e => panic!("expected Error::Database, got {:?}", e)
|
||||
};
|
||||
|
||||
assert_eq!(&db_err.downcast_ref::<SqliteError>().code, "SQLITE_ERR_SOMETHING");
|
||||
assert_eq!(db_err.downcast::<SqliteError>().code, "SQLITE_ERR_SOMETHING");
|
||||
}
|
Loading…
Reference in a new issue