|  | using System; | 
|  | using System.Text; | 
|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
|  | using OfficeOpenXml.FormulaParsing; | 
|  | using Rhino.Mocks; | 
|  | using OfficeOpenXml.FormulaParsing.ExcelUtilities; | 
|  |  | 
|  | namespace EPPlusTest.FormulaParsing | 
|  | { | 
|  | [TestClass] | 
|  | public class ParsingScopesTest | 
|  | { | 
|  | private ParsingScopes _parsingScopes; | 
|  | private IParsingLifetimeEventHandler _lifeTimeEventHandler; | 
|  |  | 
|  | [TestInitialize] | 
|  | public void Setup() | 
|  | { | 
|  | _lifeTimeEventHandler = MockRepository.GenerateStub<IParsingLifetimeEventHandler>(); | 
|  | _parsingScopes = new ParsingScopes(_lifeTimeEventHandler); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void CreatedScopeShouldBeCurrentScope() | 
|  | { | 
|  | using (var scope = _parsingScopes.NewScope(RangeAddress.Empty)) | 
|  | { | 
|  | Assert.AreEqual(_parsingScopes.Current, scope); | 
|  | } | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void CurrentScopeShouldHandleNestedScopes() | 
|  | { | 
|  | using (var scope1 = _parsingScopes.NewScope(RangeAddress.Empty)) | 
|  | { | 
|  | Assert.AreEqual(_parsingScopes.Current, scope1); | 
|  | using (var scope2 = _parsingScopes.NewScope(RangeAddress.Empty)) | 
|  | { | 
|  | Assert.AreEqual(_parsingScopes.Current, scope2); | 
|  | } | 
|  | Assert.AreEqual(_parsingScopes.Current, scope1); | 
|  | } | 
|  | Assert.IsNull(_parsingScopes.Current); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void CurrentScopeShouldBeNullWhenScopeHasTerminated() | 
|  | { | 
|  | using (var scope = _parsingScopes.NewScope(RangeAddress.Empty)) | 
|  | { } | 
|  | Assert.IsNull(_parsingScopes.Current); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void NewScopeShouldSetParentOnCreatedScopeIfParentScopeExisted() | 
|  | { | 
|  | using (var scope1 = _parsingScopes.NewScope(RangeAddress.Empty)) | 
|  | { | 
|  | using (var scope2 = _parsingScopes.NewScope(RangeAddress.Empty)) | 
|  | { | 
|  | Assert.AreEqual(scope1, scope2.Parent); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void LifetimeEventHandlerShouldBeCalled() | 
|  | { | 
|  | using (var scope = _parsingScopes.NewScope(RangeAddress.Empty)) | 
|  | { } | 
|  | _lifeTimeEventHandler.AssertWasCalled(x => x.ParsingCompleted()); | 
|  | } | 
|  | } | 
|  | } |