public AssociativeReader( [NotNull] ILogger testLogger, [NotNull] XmlReader reader, [NotNull] ScopeHandler scopeHandler) { _testLogger = testLogger; _reader = reader; _rootScopeHandler = scopeHandler; }
public void Scan() { while (_reader.Read()) { if (_reader.NodeType == XmlNodeType.EndElement) { if (_virtualScopeCounter > 0) { _virtualScopeCounter--; continue; } _scopeHandler = _currentScope.Handler; _currentScope.ReportUnvisitedMandatoryHandlers(_testLogger); _currentScope = _currentScope.ParentScope; continue; } if (_virtualScopeCounter > 0) { if (!_reader.IsEmptyElement) { _virtualScopeCounter++; } continue; } var name = _reader.GetName(); if (_scopeHandler == null) { Debug.Assert(name == _rootScopeHandler.Name); _scopeHandler = _rootScopeHandler; _currentScope = new Scope(_scopeHandler); continue; } ScopeHandler scopeHandler; if (!_scopeHandler.SubDescriptors.TryGetValue(name, out scopeHandler)) { if (!_reader.IsEmptyElement) { _virtualScopeCounter++; } continue; } _currentScope.Visit(name); if (!_reader.IsEmptyElement) { _currentScope = new Scope(_currentScope, _scopeHandler); _scopeHandler = scopeHandler; } if (scopeHandler.Handler != null) { scopeHandler.Handler(_reader); } } }
public Scope([NotNull] Scope parentScope, [NotNull] ScopeHandler handler) : this(handler) { ParentScope = parentScope; }
public Scope([NotNull] ScopeHandler handler) { Handler = handler; _mandatoryHandlers = new HashSet <XName>(handler.SubDescriptors .Values.Where(s => s.Mandatory).Select(s => s.Name)); }