public void sad_path()
        {
            var arg1 = new Argument(typeof(string), "foo");
            var arg2 = new Argument(typeof(string), "bar");

            var frame1 = new FrameThatBuildsVariable("aaa", typeof(string));
            var frame2 = new FrameThatBuildsVariable("bbb", typeof(string));

            var method = new GeneratedMethod("Something", new Argument[] { arg1, arg2 }, new List <Frame> {
                frame1, frame2
            });
            var source1 = new StubbedSource(typeof(string), "ccc");
            var source2 = new StubbedSource(typeof(string), "ddd");

            method.Sources.Add(source1);
            method.Sources.Add(source2);

            Exception <ArgumentOutOfRangeException> .ShouldBeThrownBy(() =>
            {
                method.ToArranger().FindVariableByName(typeof(string), "missing");
            });
        }
        public void sourced_from_a_variable_source()
        {
            var arg1 = new Argument(typeof(string), "foo");
            var arg2 = new Argument(typeof(string), "bar");

            var frame1 = new FrameThatBuildsVariable("aaa", typeof(string));
            var frame2 = new FrameThatBuildsVariable("bbb", typeof(string));

            var method = new GeneratedMethod("Something", new Argument[] { arg1, arg2 }, new List <Frame> {
                frame1, frame2
            });
            var source1 = new StubbedSource(typeof(string), "ccc");
            var source2 = new StubbedSource(typeof(string), "ddd");

            method.Sources.Add(source1);
            method.Sources.Add(source2);

            method.ToArranger().FindVariableByName(typeof(string), "ccc")
            .ShouldBeSameAs(source1.Variable);

            method.ToArranger().FindVariableByName(typeof(string), "ddd")
            .ShouldBeSameAs(source2.Variable);
        }