use ckb_logger::Level;

mod utils;

#[test]
fn has_panic_info() {
    let (config, _tmp_dir) = utils::config_in_tempdir(|_| {});
    let log_file = config.log_dir.join(config.file.as_path());
    let line_content = "test has panic info";
    let panic_message = "panic first";
    let panic_line_content_1 = format!(r"thread 'unnamed' panicked at '{panic_message}':.*");
    let panic_line_content_2 = r"thread 'unnamed' panicked at 'panic second':.*";
    utils::do_tests(config, || {
        let _ = ::std::thread::spawn(move || {
            panic!("{panic_message}");
        })
        .join();
        let _ = ::std::thread::spawn(move || {
            panic!("panic second");
        })
        .join();
        ckb_logger::error!("{}", line_content);
    });

    utils::test_if_log_file_exists(&log_file, true);

    assert!(utils::has_line_in_log_file(
        &log_file,
        Level::Error,
        &panic_line_content_1
    ));

    assert!(utils::has_line_in_log_file(
        &log_file,
        Level::Error,
        panic_line_content_2
    ));

    assert!(utils::has_line_in_log_file(
        &log_file,
        Level::Error,
        line_content
    ));
}