/// <summary>
        /// Обойти дерево парсинга при помощи <see cref="ParseTreeWalker"/>.
        /// Подключаются все listener-ы из сборки <see cref="OFP.Library"/>.
        /// </summary>
        /// <param name="tree">
        /// Корень дерева, которое будет обходить <see cref="ParseTreeWalker"/>.
        /// </param>
        protected void WalkParseTree(IParseTree tree)
        {
            var listeners  = _currentScope.Resolve <IEnumerable <IOrdinaryFormListener> >();
            var dispatcher = new ProxyParseTreeListener(listeners);

            var walker = ParseTreeWalker.Default;

            walker.Walk(dispatcher, tree);
        }
Esempio n. 2
0
        public void ProxyParseTreeListener_EnterEveryRule_DispatchesToAllListeners()
        {
            // Given.
            var dispatcher = new ProxyParseTreeListener(_listeners);

            // When.
            dispatcher.EnterEveryRule(_context);

            // Then.
            foreach (var listener in _listeners)
            {
                listener.Received(1)
                .EnterEveryRule(_context);

                listener.DidNotReceiveWithAnyArgs()
                .ExitEveryRule(default);