From 6dc392bf1823eb9d758f34cd47e5b13c99ef4ba1 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Mon, 3 Apr 2017 23:56:21 +0300 Subject: [PATCH] integration tests --- src/elements/func.rs | 4 ++-- src/elements/module.rs | 34 ++++++++++++++++++++++++++++++---- src/elements/ops.rs | 2 ++ 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/elements/func.rs b/src/elements/func.rs index 1153017..54bb2fb 100644 --- a/src/elements/func.rs +++ b/src/elements/func.rs @@ -61,7 +61,7 @@ impl FuncBody { } pub fn locals(&self) -> &[Local] { &self.locals } - + pub fn code(&self) -> &Opcodes { &self.opcodes } } @@ -89,7 +89,7 @@ impl Serialize for FuncBody { data.into_iter().map(Into::into), ); counted_list.serialize(&mut counted_writer)?; - + let code = self.opcodes; code.serialize(&mut counted_writer)?; diff --git a/src/elements/module.rs b/src/elements/module.rs index 7375d1a..0a933af 100644 --- a/src/elements/module.rs +++ b/src/elements/module.rs @@ -1,6 +1,6 @@ use std::io; use super::{Deserialize, Serialize, Error, Uint32}; -use super::section::Section; +use super::section::{Section, CodeSection}; pub struct Module { magic: u32, @@ -18,6 +18,13 @@ impl Module { pub fn sections_mut(&mut self) -> &mut Vec
{ &mut self.sections } + + pub fn code_section(&self) -> Option<&CodeSection> { + for section in self.sections() { + if let &Section::Code(ref code_section) = section { return Some(code_section); } + } + None + } } impl Deserialize for Module { @@ -60,7 +67,7 @@ impl Serialize for Module { #[cfg(test)] mod integration_tests { - use super::super::{deserialize_file, serialize, deserialize_buffer}; + use super::super::{deserialize_file, serialize, deserialize_buffer, Section}; use super::Module; #[test] @@ -73,12 +80,31 @@ mod integration_tests { #[test] fn serde() { - let module = deserialize_file("./res/cases/v1/hello.wasm").expect("Should be deserialized"); + let module = deserialize_file("./res/cases/v1/test5.wasm").expect("Should be deserialized"); let buf = serialize(module).expect("serialization to succeed"); let module_new: Module = deserialize_buffer(buf).expect("deserialization to succeed"); - let module_old = deserialize_file("./res/cases/v1/hello.wasm").expect("Should be deserialized"); + let module_old = deserialize_file("./res/cases/v1/test5.wasm").expect("Should be deserialized"); assert_eq!(module_old.sections().len(), module_new.sections().len()); } + + #[test] + fn serde_code() { + let mut module = deserialize_file("./res/cases/v1/test5.wasm").expect("Should be deserialized"); + module.sections_mut().retain(|x| { + if let &Section::Code(_) = x { true } else { false } + }); + + let buf = serialize(module).expect("serialization to succeed"); + + let module_new: Module = deserialize_buffer(buf).expect("deserialization to succeed"); + let module_old = deserialize_file("./res/cases/v1/test5.wasm").expect("Should be deserialized"); + assert_eq!( + module_old.code_section().expect("code section exists").bodies().len(), + module_new.code_section().expect("code section exists").bodies().len(), + "There should be equal amount of function bodies before and after serialization" + ); + + } } \ No newline at end of file diff --git a/src/elements/ops.rs b/src/elements/ops.rs index e075f10..8947f31 100644 --- a/src/elements/ops.rs +++ b/src/elements/ops.rs @@ -5,6 +5,7 @@ use super::{ Uint32, VarUint64, Uint64, CountedListWriter }; +#[derive(Debug)] pub struct Opcodes(Vec); impl Opcodes { @@ -70,6 +71,7 @@ impl Deserialize for InitExpr { } } +#[derive(Debug)] pub enum Opcode { Unreachable, Nop,