shank_parse::shank_parse!("../idl/counter.json");
#[cfg(test)]
mod tests {
use super::counter::accounts::*;
use super::counter::instructions::*;
use super::counter::types::*;
use super::counter::ID;
use shank_parse::__private::Pubkey;
#[test]
fn test_program_id() {
assert_eq!(
ID.to_string(),
"8F1XtWR4wTs37nnutBvd2MWpCTfb7XAciFYkw5XHaENj"
);
}
#[test]
fn test_counter_from_account_data() {
let mut data = Vec::new();
data.push(1u8);
data.extend_from_slice(&42u64.to_le_bytes());
let counter = Counter::from_account_data(&data).unwrap();
assert_eq!(counter.bump, 1);
assert_eq!(counter.count, 42);
}
#[test]
fn test_counter_authority_from_account_data() {
let authority = [7u8; 32];
let mut data = Vec::new();
data.extend_from_slice(&authority);
data.push(5u8);
data.extend_from_slice(&100u64.to_le_bytes());
let ca = CounterAuthority::from_account_data(&data).unwrap();
assert_eq!(ca.authority, authority);
assert_eq!(ca.bump, 5);
assert_eq!(ca.count, 100);
}
#[test]
fn test_counter_from_account_data_insufficient() {
let data = vec![1u8];
assert!(Counter::from_account_data(&data).is_err());
}
#[test]
fn test_init_counter_instruction() {
let program_id = Pubkey::new_from_array([1u8; 32]);
let accounts = InitCounterAccounts {
payer: Pubkey::new_from_array([2u8; 32]),
counter: Pubkey::new_from_array([3u8; 32]),
system_program: Pubkey::new_from_array([4u8; 32]),
};
let args = InitCounterArgs { count: 42 };
let ix = init_counter(&program_id, &accounts, &args).unwrap();
assert_eq!(ix.program_id, program_id);
assert_eq!(ix.accounts.len(), 3);
assert_eq!(ix.data[0], 0); assert_eq!(
u64::from_le_bytes(ix.data[1..9].try_into().expect("slice")),
42
);
assert!(!ix.accounts[0].is_writable); assert!(ix.accounts[0].is_signer); assert!(ix.accounts[1].is_writable); assert!(!ix.accounts[1].is_signer); }
#[test]
fn test_increase_counter_instruction() {
let program_id = Pubkey::new_from_array([1u8; 32]);
let accounts = IncreaseCounterAccounts {
counter: Pubkey::new_from_array([3u8; 32]),
};
let ix = increase_counter(&program_id, &accounts).unwrap();
assert_eq!(ix.program_id, program_id);
assert_eq!(ix.accounts.len(), 1);
assert_eq!(ix.data, vec![1u8]); }
#[test]
fn test_init_counter_authority_instruction() {
let program_id = Pubkey::new_from_array([1u8; 32]);
let accounts = InitCounterAuhthorityAccounts {
payer: Pubkey::new_from_array([2u8; 32]),
counter_authority: Pubkey::new_from_array([3u8; 32]),
system_program: Pubkey::new_from_array([4u8; 32]),
};
let args = InitCounterAuthorityArgs { count: 99 };
let ix = init_counter_auhthority(&program_id, &accounts, &args).unwrap();
assert_eq!(ix.program_id, program_id);
assert_eq!(ix.accounts.len(), 3);
assert_eq!(ix.data[0], 2); }
#[test]
fn test_increase_counter_authority_instruction() {
let program_id = Pubkey::new_from_array([1u8; 32]);
let accounts = IncreaseCounterAuthorityAccounts {
authority: Pubkey::new_from_array([2u8; 32]),
counter_authority: Pubkey::new_from_array([3u8; 32]),
};
let ix = increase_counter_authority(&program_id, &accounts).unwrap();
assert_eq!(ix.data, vec![3u8]); assert!(ix.accounts[0].is_signer); }
#[test]
fn test_counter_increased_try_from_slice() {
let payload = 42u64.to_le_bytes();
let ev = CounterIncreased::try_from_slice(&payload).unwrap();
assert_eq!(ev.new_count, 42);
}
#[test]
fn test_counter_initialized_try_from_slice() {
let payload = 10u64.to_le_bytes();
let ev = CounterInitialized::try_from_slice(&payload).unwrap();
assert_eq!(ev.count, 10);
}
#[test]
fn test_counter_event_enum_try_from_slice() {
let mut data0 = vec![0u8]; data0.extend_from_slice(&10u64.to_le_bytes());
assert_eq!(
CounterEvent::try_from_slice(&data0).unwrap(),
CounterEvent::CounterInitialized(CounterInitialized { count: 10 })
);
let mut data1 = vec![1u8]; data1.extend_from_slice(&20u64.to_le_bytes());
assert_eq!(
CounterEvent::try_from_slice(&data1).unwrap(),
CounterEvent::CounterIncreased(CounterIncreased { new_count: 20 })
);
}
#[test]
fn test_event_try_from_slice_rejects_unknown_tag() {
let mut data = vec![9u8];
data.extend_from_slice(&1u64.to_le_bytes());
assert!(CounterEvent::try_from_slice(&data).is_err());
}
#[test]
fn test_event_try_from_slice_rejects_truncated_payload() {
assert!(CounterEvent::try_from_slice(&[0u8]).is_err());
}
}