neo-decompiler 0.11.0

Neo N3 NEF decompiler: parse, disassemble, lift bytecode to high-level pseudocode and C# skeletons, with a CLI, JSON reports, and optional WebAssembly bindings.
Documentation
use super::super::super::*;

#[test]
fn rewrite_switch_statements_supports_temp_case_values() {
    let mut statements = vec![
        "let t1 = 0;".to_string(),
        "if loc0 == t1 {".to_string(),
        "    do0;".to_string(),
        "}".to_string(),
        "else if loc0 == 1 {".to_string(),
        "    do1;".to_string(),
        "}".to_string(),
        "else {".to_string(),
        "    do2;".to_string(),
        "}".to_string(),
    ];

    HighLevelEmitter::rewrite_switch_statements(&mut statements);

    assert_eq!(statements[0], "let t1 = 0;");
    assert_eq!(statements[1], "switch loc0 {");
    assert!(statements.iter().any(|line| line.trim() == "case 0 {"));
    assert!(statements.iter().any(|line| line.trim() == "case 1 {"));
    assert!(statements.iter().any(|line| line.trim() == "default {"));
    assert!(statements.iter().any(|line| line.trim() == "do0;"));
    assert!(statements.iter().any(|line| line.trim() == "do1;"));
    assert!(statements.iter().any(|line| line.trim() == "do2;"));
}

#[test]
fn rewrite_switch_statements_supports_string_literal_case_values() {
    let mut statements = vec![
        "let t0 = \"0\";".to_string(),
        "let t1 = loc0 == t0;".to_string(),
        "if t1 {".to_string(),
        "    do0;".to_string(),
        "}".to_string(),
        "let t2 = \"1\";".to_string(),
        "let t3 = loc0 == t2;".to_string(),
        "if t3 {".to_string(),
        "    do1;".to_string(),
        "}".to_string(),
        "let t4 = \"2\";".to_string(),
        "let t5 = loc0 == t4;".to_string(),
        "if t5 {".to_string(),
        "    do2;".to_string(),
        "}".to_string(),
    ];

    HighLevelEmitter::rewrite_switch_statements(&mut statements);

    assert!(statements.iter().any(|line| line.trim() == "switch loc0 {"));
    assert!(statements.iter().any(|line| line.trim() == "case \"0\" {"));
    assert!(statements.iter().any(|line| line.trim() == "case \"1\" {"));
    assert!(statements.iter().any(|line| line.trim() == "case \"2\" {"));
}