@Test
  public void testRequestScope() {
    // Create global scope
    int nPrev = AbstractScopeSPI.getBegin();
    int nPrevT = AbstractThrowingScopeSPI.getBegin();
    ScopeManager.onGlobalBegin("global");
    assertEquals(nPrev + 1, AbstractScopeSPI.getBegin());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getBegin());

    // Create request scope
    nPrev = AbstractScopeSPI.getBegin();
    nPrevT = AbstractThrowingScopeSPI.getBegin();
    ScopeManager.onRequestBegin("appid", "scopeid", "sessionid");
    assertEquals(nPrev + 1, AbstractScopeSPI.getBegin());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getBegin());

    // End request scope
    nPrev = AbstractScopeSPI.getEnd();
    nPrevT = AbstractThrowingScopeSPI.getEnd();
    ScopeManager.onRequestEnd();
    assertEquals(nPrev + 1, AbstractScopeSPI.getEnd());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getEnd());

    // End global scope
    nPrev = AbstractScopeSPI.getEnd();
    nPrevT = AbstractThrowingScopeSPI.getEnd();
    ScopeManager.onGlobalEnd();
    assertEquals(nPrev + 1, AbstractScopeSPI.getEnd());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getEnd());
  }
  @Test
  public void testGlobalScope() {
    // Create global scope only
    int nPrev = AbstractScopeSPI.getBegin();
    int nPrevT = AbstractThrowingScopeSPI.getBegin();
    ScopeManager.onGlobalBegin("global");
    assertEquals(nPrev + 1, AbstractScopeSPI.getBegin());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getBegin());

    // End global scope
    nPrev = AbstractScopeSPI.getEnd();
    nPrevT = AbstractThrowingScopeSPI.getEnd();
    ScopeManager.onGlobalEnd();
    assertEquals(nPrev + 1, AbstractScopeSPI.getEnd());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getEnd());
  }
  @Test
  public void testApplicationScopes() {
    // Create global scope
    int nPrev = AbstractScopeSPI.getBegin();
    int nPrevT = AbstractThrowingScopeSPI.getBegin();
    ScopeManager.onGlobalBegin("global");
    assertEquals(nPrev + 1, AbstractScopeSPI.getBegin());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getBegin());

    // Create request scope
    nPrev = AbstractScopeSPI.getBegin();
    nPrevT = AbstractThrowingScopeSPI.getBegin();
    ScopeManager.onRequestBegin("appid", "scopeid", "sessionid");
    assertEquals(nPrev + 1, AbstractScopeSPI.getBegin());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getBegin());

    // Create application scope
    nPrev = AbstractScopeSPI.getBegin();
    nPrevT = AbstractThrowingScopeSPI.getBegin();
    ScopeManager.getApplicationScope();
    assertEquals(nPrev + 1, AbstractScopeSPI.getBegin());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getBegin());

    // Create second application scope
    nPrev = AbstractScopeSPI.getBegin();
    nPrevT = AbstractThrowingScopeSPI.getBegin();
    ScopeManager.getApplicationScope("any other blabla");
    assertEquals(nPrev + 1, AbstractScopeSPI.getBegin());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getBegin());

    // End request scope
    nPrev = AbstractScopeSPI.getEnd();
    nPrevT = AbstractThrowingScopeSPI.getEnd();
    ScopeManager.onRequestEnd();
    assertEquals(nPrev + 1, AbstractScopeSPI.getEnd());
    assertEquals(nPrevT + 1, AbstractThrowingScopeSPI.getEnd());

    // End global scope and application scopes
    nPrev = AbstractScopeSPI.getEnd();
    nPrevT = AbstractThrowingScopeSPI.getEnd();
    ScopeManager.onGlobalEnd();
    assertEquals(nPrev + 3, AbstractScopeSPI.getEnd());
    assertEquals(nPrevT + 3, AbstractThrowingScopeSPI.getEnd());
  }