wasm_names fix

This commit is contained in:
Svyatoslav Nikolsky
2017-06-20 13:31:14 +03:00
parent f160514471
commit a1232e031a
2 changed files with 13 additions and 2 deletions

View File

@ -101,7 +101,7 @@ run_test!("loop", wasm_loop);
run_test!("memory_redundancy", wasm_memory_redundancy);
run_test!("memory_trap", wasm_memory_trap);
run_test!("memory", wasm_memory);
// TODO: fix comparison??? run_test!("names", wasm_names);
run_test!("names", wasm_names);
run_test!("nop", wasm_nop);
run_test!("of_string-overflow-hex-u32.fail", wasm_of_string_overflow_hex_u32_fail, fail);
run_test!("of_string-overflow-hex-u64.fail", wasm_of_string_overflow_hex_u64_fail, fail);

View File

@ -97,12 +97,13 @@ fn run_action(program: &ProgramInstance, action: &test::Action)
let module = module.clone().unwrap_or("wasm_test".into());
let module = module.trim_left_matches('$');
let module = program.module(&module).expect(&format!("Expected program to have loaded module {}", module));
module.execute_export(field, runtime_values(args).into())
module.execute_export(&jstring_to_rstring(field), runtime_values(args).into())
},
test::Action::Get { ref module, ref field, .. } => {
let module = module.clone().unwrap_or("wasm_test".into());
let module = module.trim_left_matches('$');
let module = program.module(&module).expect(&format!("Expected program to have loaded module {}", module));
let field = jstring_to_rstring(&field);
module.export_entry(field.as_ref(), &ExportEntryType::Any)
.and_then(|i| match i {
@ -280,3 +281,13 @@ pub fn spec(name: &str) {
}
}
}
// Convert json string to correct rust UTF8 string.
// The reason is that, for example, rust character "\u{FEEF}" (3-byte UTF8 BOM) is represented as "\u00ef\u00bb\u00bf" in json.
// It is incorrect. Correct "\uFEFF" => we need to do a double utf8 parse here.
// This conversion is incorrect in general case (casting char to u8)!!!
fn jstring_to_rstring(jstring: &str) -> String {
let jstring_chars: Vec<u8> = jstring.chars().map(|c| c as u8).collect();
let rstring = String::from_utf8(jstring_chars).unwrap();
rstring
}