cairo-lang-starknet 1.0.0-alpha.2

Starknet capabilities and utilities on top of Cairo.
Documentation
use cairo_lang_filesystem::db::FilesGroup;
use cairo_lang_semantic::test_utils::{setup_test_crate, SemanticDatabaseForTesting};
use indoc::indoc;
use itertools::Itertools;
use pretty_assertions::assert_eq;

use crate::contract::{find_contracts, get_module_functions, starknet_keccak};
use crate::plugin::EXTERNAL_MODULE;

#[test]
fn test_contract_resolving() {
    let mut db_val = SemanticDatabaseForTesting::default();
    let db = &mut db_val;
    let _crate_id = setup_test_crate(
        db,
        indoc! {"
            mod NotAContract {}

            #[generated_contract]
            mod ERC20 {
                fn internal_func(ref system: System) -> felt {
                    1
                }

                #[external]
                fn ep1() {}

                #[external]
                fn ep2() {}

                trait __abi {
                    fn ep1();
                    fn ep2();
                }
                mod __external {
                    fn ep1() {}
                    fn ep2() {}
                }
            }
        "},
    );

    let contracts = find_contracts(db, &db.crates());
    assert_eq!(contracts.len(), 1);

    assert_eq!(
        get_module_functions(db, &contracts[0], EXTERNAL_MODULE)
            .unwrap()
            .into_iter()
            .map(|func_id| func_id.name(db))
            .collect_vec(),
        vec!["ep1", "ep2"]
    );
}

#[test]
fn test_starknet_keccak() {
    assert_eq!(
        format!("0x{:x}", starknet_keccak("__execute__".as_bytes())),
        "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad",
    )
}