diff options
author | Mike Gerwitz <mike.gerwitz@ryansg.com> | 2020-04-06 09:23:22 -0400 |
---|---|---|
committer | Mike Gerwitz <mike.gerwitz@ryansg.com> | 2020-04-06 09:56:13 -0400 |
commit | 68c7636be8ba4e0f681c2034f75c7ab83ce12d3a (patch) | |
tree | e14f592f06c1c9a24c7e52f81eabb8e6fd564ccb | |
parent | b87048094460681c11d5202f89df607fe043acab (diff) | |
download | tame-68c7636be8ba4e0f681c2034f75c7ab83ce12d3a.tar.gz tame-68c7636be8ba4e0f681c2034f75c7ab83ce12d3a.tar.bz2 tame-68c7636be8ba4e0f681c2034f75c7ab83ce12d3a.zip |
[DEV-7086] TAMER: ir::asg::base::test Add missing set_fragment failure test
Results the last remaining BaseAsg test TODO.
-rw-r--r-- | tamer/src/ir/asg/base.rs | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/tamer/src/ir/asg/base.rs b/tamer/src/ir/asg/base.rs index 16e66d9..637c892 100644 --- a/tamer/src/ir/asg/base.rs +++ b/tamer/src/ir/asg/base.rs @@ -419,6 +419,7 @@ mod test { given_set_fragment: Option<FragmentText>, fail_redeclare: RefCell<Option<TransitionError>>, fail_extern: RefCell<Option<TransitionError>>, + fail_set_fragment: RefCell<Option<TransitionError>>, } impl<'i> IdentObjectData<'i> for StubIdentObject<'i> { @@ -483,6 +484,11 @@ mod test { mut self, text: FragmentText, ) -> TransitionResult<StubIdentObject<'i>> { + if self.fail_set_fragment.borrow().is_some() { + let err = self.fail_set_fragment.replace(None).unwrap(); + return Err((self, err)); + } + self.given_set_fragment.replace(text); Ok(self) } @@ -740,7 +746,39 @@ mod test { Ok(()) } - // TODO: fragment fail + #[test] + fn add_fragment_to_ident_fails_if_transition_fails() -> AsgResult<(), u8> { + let mut sut = Sut::with_capacity(0, 0); + + let sym = symbol_dummy!(1, "failfrag"); + let src = Source { + generated: true, + ..Default::default() + }; + + // The failure will come from terr below, not this. + let node = sut.declare(&sym, IdentKind::Meta, src.clone())?; + let obj = sut.get(node).unwrap(); + + // It doesn't matter that this isn't the error that'll actually be + // returned, as long as it's some sort of TransitionError. + let terr = TransitionError::BadFragmentDest { + name: String::from("test fail"), + }; + obj.fail_set_fragment.replace(Some(terr.clone())); + + let result = sut + .set_fragment(node, "".into()) + .expect_err("error expected"); + + // The node should have been restored. + let obj = sut.get(node).unwrap(); + + assert_eq!(&sym, *obj.given_declare.as_ref().unwrap()); + assert_eq!(AsgError::ObjectTransition(terr), result); + + Ok(()) + } #[test] fn add_ident_dep_to_ident() -> AsgResult<(), u8> { |