1. 04 2月, 2014 1 次提交
    • S
      Ensure all tests are executed in the Gradle build · b8ed2f49
      Sam Brannen 提交于
      Prior to this commit several test classes named "*Test" were not
      recognized as tests by the Gradle build. This is due to the configured
      inclusion of '**/*Tests.*' which follows Spring's naming convention for
      test classes.
      
      This commit addresses this issue by:
      
       - Renaming real test classes consistently to "*Tests".
       - Renaming internal test classes to "*TestCase".
       - Renaming @WebTest to @WebTestStereotype.
       - Disabling broken tests in AnnoDrivenStaticEntityMockingControlTest.
       - Modifying the Gradle build configuration so that classes ending in
         either "*Tests" or "*Test" are considered test classes.
      
      Issue: SPR-11384
      b8ed2f49
  2. 01 2月, 2014 1 次提交
    • S
      Verify ServletCtxAware beans are processed in WAC tests · a521ef5c
      Sam Brannen 提交于
      SPR-11145 claims that ServletContextAware beans declared in an
      ApplicationContext loaded for an integration test by the TestContext
      framework (TCF) do not have their setServletContext() methods invoked
      if the tests are executed manually using JUnit 4.11.
      
      This commit verifies that such ServletContextAware beans are processed
      properly regardless of how the test was launched. Specifically:
      
       - A ServletContextAwareBean has been introduced.
      
       - BasicAnnotationConfigWacTests has been retrofitted with a
         ServletContextAwareBean in its context.
      
       - ServletContextAwareBeanWacTests has been introduced to execute
         BasicAnnotationConfigWacTests manually via JUnitCore.
      
      Issue: SPR-11145
      a521ef5c
  3. 23 1月, 2014 1 次提交
    • S
      Delete unnecessary redeclaration of test methods · 81050113
      Sam Brannen 提交于
      This commit deletes methods in RollbackForRequiredEjbTxDaoTestNGTests
      that were unnecessarily redeclared. The redeclaration is required for
      JUnit's @FixMethodOrder support but not for TestNG's built-in support
      for dependent methods.
      
      Issue: SPR-6132
      81050113
  4. 22 1月, 2014 1 次提交
    • S
      Introduce EJB-based transactional tests in the TCF · c0eafa9e
      Sam Brannen 提交于
      This commit introduces transactional integration tests executing
      against both JUnit and TestNG in the TestContext framework (TCF) using
      @TransactionAttribute in EJBs instead of Spring’s @Transactional
      annotation.
      
      These tests disprove the claims raised in SPR-6132 by demonstrating that
      transaction support in the TCF works as expected when a transactional
      EJB method that is configured with TransactionAttribute.REQUIRES_NEW is
      invoked. Specifically:
      
       - The transaction managed by the TCF is suspended while such an EJB
         method is invoked.
       - Any work performed within the new transaction for the EJB method is
         committed after the method invocation completes.
       - The transaction managed by the TCF is resumed and subsequently
         either rolled back or committed as necessary based on the
         configuration of @Rollback and @TransactionConfiguration.
      
      The configuration for the JUnit-based tests is straightforward and self
      explanatory; however, the configuration for the TestNG tests is less
      intuitive.
      
      In order for the TCF to function properly, the developer must ensure
      that test methods within a given TestNG test (whether defined locally,
      in a superclass, or somewhere else in the suite) are executed in the
      proper order. In a stand-alone test class this is straightforward;
      however, in a test class hierarchy (or test suite) with dependent
      methods, it is necessary to configure TestNG so that all methods within
      an individual test are executed in isolation from test methods in other
      tests. This can be achieved by configuring a test class to run in its
      own uniquely identified suite (e.g., by annotating each concrete
      TestNG-based test class with @test(suiteName = "< Some Unique Suite
      Name >")).
      
      For example, without specifying a unique suite name for the TestNG
      tests introduced in this commit, test methods will be executed in the
      following (incorrect) order:
      
       - CommitForRequiredEjbTxDaoTestNGTests.test1InitialState()
       - CommitForRequiresNewEjbTxDaoTestNGTests.test1InitialState()
       - RollbackForRequiresNewEjbTxDaoTestNGTests.test1InitialState()
       - RollbackForRequiredEjbTxDaoTestNGTests.test1InitialState()
       - CommitForRequiredEjbTxDaoTestNGTests.test2IncrementCount1()
      
      The reason for this ordering is that test2IncrementCount1() depends on
      test1InitialState(); however, the intention of the developer is that
      the tests for an individual test class are independent of those in
      other test classes. So by specifying unique suite names for each test
      class, the following (correct) ordering is achieved:
      
       - RollbackForRequiresNewEjbTxDaoTestNGTests.test1InitialState()
       - RollbackForRequiresNewEjbTxDaoTestNGTests.test2IncrementCount1()
       - RollbackForRequiresNewEjbTxDaoTestNGTests.test3IncrementCount2()
       - CommitForRequiredEjbTxDaoTestNGTests.test1InitialState()
       - CommitForRequiredEjbTxDaoTestNGTests.test2IncrementCount1()
       - CommitForRequiredEjbTxDaoTestNGTests.test3IncrementCount2()
       - RollbackForRequiredEjbTxDaoTestNGTests.test1InitialState()
       - RollbackForRequiredEjbTxDaoTestNGTests.test2IncrementCount1()
       - RollbackForRequiredEjbTxDaoTestNGTests.test3IncrementCount2()
       - CommitForRequiresNewEjbTxDaoTestNGTests.test1InitialState()
       - CommitForRequiresNewEjbTxDaoTestNGTests.test2IncrementCount1()
       - CommitForRequiresNewEjbTxDaoTestNGTests.test3IncrementCount2()
      
      See the JIRA issue for more detailed log output.
      
      Furthermore, @DirtiesContext(classMode = ClassMode.AFTER_CLASS) has
      been used in both the JUnit and TestNG tests introduced in this commit
      in order to ensure that the in-memory database is reinitialized between
      each test class.
      
      Issue: SPR-6132
      c0eafa9e
  5. 21 1月, 2014 1 次提交
  6. 15 1月, 2014 2 次提交
  7. 06 1月, 2014 2 次提交
  8. 03 1月, 2014 1 次提交
    • B
      Switch to Jackson 2 in unit tests · 1c83e865
      Brian Clozel 提交于
      Prior to this commit, some unit tests were using
      Spring's Jackson 1.x implementations. Now Jackson
      2.x implementations are the default ones used in
      unit tests.
      
      Even if Jackson 1.x support is deprecated, Jackson 1.x
      unit tests are kept.
      
      Issue: SPR-11121
      1c83e865
  9. 24 12月, 2013 1 次提交
    • R
      Introduce AbstractMockMvcBuilder class · 2e4f38f6
      Rossen Stoyanchev 提交于
      This change splits out an abstract base class from DefaultMockMvcBuilder
      with StandaloneMockMvcBuilder switching to extend the new abstract class
      (rather than DefaultMockMvcBuilder).
      
      Issue: SPR-11238
      2e4f38f6
  10. 11 12月, 2013 4 次提交
    • S
      Document meta-annotation support in the TCF · a223e247
      Sam Brannen 提交于
      - Completed Javadoc for MetaAnnotationUtils.
      - Added Javadoc notes to multiple annotations in the TCF, pointing out
        which annotations can be used as meta-annotations.
      
      Issue: SPR-11109
      a223e247
    • S
      Polish meta-annotation terminology in MetaAnnoUtils · da7ae4a6
      Sam Brannen 提交于
      da7ae4a6
    • S
      Do not repopulate RequestContextHolder in ServTEL · 800018a8
      Sam Brannen 提交于
      This commit fixes a bug introduced in the last commit.
      
      ServletTestExecutionListener (STEL) now tracks whether it has already
      populated the RequestContextHolder.
      
      Issue: SPR-11144
      800018a8
    • S
      Honor presence of @WebAppConfiguration in ServTEL · 099b10d2
      Sam Brannen 提交于
      The previous commit for issue SPR-11144 revealed a bug in
      ServletTestExecutionListener (STEL). Specifically, STEL acted on the
      fact that the ApplicationContext for a given TestContext was an
      instance of WebApplicationContext. This behavior could potentially
      break test code from previous releases of the Spring Framework that
      relied on a custom setup of the RequestAttributes in the
      RequestContextHolder with a custom WebApplicationContext ContextLoader.
      
      This commit addresses this issue by ensuring that STEL only comes into
      play if the test class is annotated with @WebAppConfiguration (for
      prepareTestInstance() and beforeTestMethod()) or if the TestContext
      attribute named RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE is set to
      Boolean.TRUE (for afterTestMethod()).
      
      Issue: SPR-11144
      099b10d2
  11. 09 12月, 2013 1 次提交
    • S
      Ensure ServTEL doesn't reset ReqAttrs by accident · a3b022aa
      Sam Brannen 提交于
      Prior to this commit, the ServletTestExecutionListener did not
      overwrite RequestAttributes in the RequestContextHolder if the
      ApplicationContext associated with the given TestContext was not a
      WebApplicationContext; however, the ServletTestExecutionListener would
      clear the RequestAttributes after every test method execution,
      regardless of whether the context was a WebApplicationContext or not.
      This behavior breaks backwards compatibility with integration tests
      that managed the RequestAttributes in RequestContextHolder themselves.
      
      This commit addresses this issue by introducing a TestContext attribute
      named RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE in
      ServletTestExecutionListener. This attribute is used internally within
      ServletTestExecutionListener to ensure that the RequestContextHolder is
      only cleared (i.e., reset) if the ServletTestExecutionListener actually
      populated the RequestContextHolder.
      
      Issue: SPR-11144
      a3b022aa
  12. 03 12月, 2013 1 次提交
  13. 27 11月, 2013 2 次提交
    • P
      Consistent whitespace after imports · 043a41e3
      Phillip Webb 提交于
      Update code to have a consistent number of new-line characters after
      import statements.
      043a41e3
    • S
      Support meta-annotation attr overrides in the TCF · 64f593db
      Sam Brannen 提交于
      Prior to this commit, the Spring TestContext Framework (TCF) supported
      the use of test-related annotations as meta-annotations for composing
      custom test stereotype annotations; however, attributes in custom
      stereotypes could not be used to override meta-annotation attributes.
      
      This commit addresses this by allowing attributes from the following
      annotations (when used as meta-annotations) to be overridden in custom
      stereotypes.
      
      - @ContextConfiguration
      - @ActiveProfiles
      - @DirtiesContext
      - @TransactionConfiguration
      - @Timed
      - @TestExecutionListeners
      
      This support depends on functionality provided by
      AnnotatedElementUtils. See the 'Notes' below for further details and
      ramifications.
      
      Notes:
      
      - AnnotatedElementUtils does not support overrides for the 'value'
        attribute of an annotation. It is therefore not possible or not
        feasible to support meta-annotation attribute overrides for some
        test-related annotations.
      - @ContextHierarchy, @WebAppConfiguration, @Rollback, @Repeat, and
        @ProfileValueSourceConfiguration define single 'value' attributes
        which cannot be overridden via Spring's meta-annotation attribute
        support.
      - Although @IfProfileValue has 'values' and 'name' attributes, the
        typical usage scenario involves the 'value' attribute which is not
        supported for meta-annotation attribute overrides. Furthermore,
        'name' and 'values' are so generic that it is deemed unfeasible to
        provide meta-annotation attribute override support for these.
      - @BeforeTransaction and @AfterTransaction do not define any attributes
        that can be overridden.
      - Support for meta-annotation attribute overrides for @Transactional is
        provided indirectly via SpringTransactionAnnotationParser.
      
      Implementation Details:
      
      - MetaAnnotationUtils.AnnotationDescriptor now provides access to the
        AnnotationAttributes for the described annotation.
      - MetaAnnotationUtils.AnnotationDescriptor now provides access to the
        root declaring class as well as the declaring class.
      - ContextLoaderUtils now retrieves AnnotationAttributes from
        AnnotationDescriptor to look up annotation attributes for
        @ContextConfiguration and @ActiveProfiles.
      - ContextConfigurationAttributes now provides a constructor to have its
        attributes sourced from an instance of AnnotationAttributes.
      - ContextLoaderUtils.resolveContextHierarchyAttributes() now throws an
        IllegalStateException if no class in the class hierarchy declares
        @ContextHierarchy.
      - TransactionalTestExecutionListener now uses AnnotatedElementUtils to
        look up annotation attributes for @TransactionConfiguration.
      - Implemented missing unit tests for @Rollback resolution in
        TransactionalTestExecutionListener.
      - SpringJUnit4ClassRunner now uses AnnotatedElementUtils to look up
        annotation attributes for @Timed.
      - TestContextManager now retrieves AnnotationAttributes from
        AnnotationDescriptor to look up annotation attributes for
        @TestExecutionListeners.
      - DirtiesContextTestExecutionListener now uses AnnotatedElementUtils to
        look up annotation attributes for @DirtiesContext.
      
      Issue: SPR-11038
      64f593db
  14. 22 11月, 2013 2 次提交
  15. 06 11月, 2013 1 次提交
  16. 28 10月, 2013 3 次提交
    • S
      Renamed @WebTests to @WebTest · 180f41c4
      Sam Brannen 提交于
      @WebTests has been renamed to @WebTest so that the Gradle build does not
      attempt to run it as a JUnit test.
      180f41c4
    • S
      Relocate test class to src/test/java folder · f9cadfe6
      Sam Brannen 提交于
      f9cadfe6
    • S
      Provide meta-annotation support in the TCF · 5e7021f3
      Sam Brannen 提交于
      Spring 3.0 already allows component stereotypes to be used in a
      meta-annotation fashion, for example by creating a custom
      @TransactionalService stereotype annotation which combines
      @Transactional and @Service in a single, reusable, application-specific
      annotation. However, the Spring TestContext Framework (TCF) currently
      does not provide any support for test-related annotations to be used as
      meta-annotations.
      
      This commit overhauls the TCF with regard to how annotations are
      retrieved and adds explicit support for the following annotations to be
      used as meta-annotations in conjunction with the TCF.
      
      - @ContextConfiguration
      - @ContextHierarchy
      - @ActiveProfiles
      - @DirtiesContext
      - @IfProfileValue
      - @ProfileValueSourceConfiguration
      - @BeforeTransaction
      - @AfterTransaction
      - @TransactionConfiguration
      - @Rollback
      - @TestExecutionListeners
      - @Repeat
      - @Timed
      - @WebAppConfiguration
      
      Note that meta-annotation support for @Transactional was already
      available prior to this commit.
      
      The following is a summary of the major changes included in this commit.
      
      - Now using AnnotationUtils.getAnnotation() instead of
        Class.getAnnotation() where appropriate in the TestContext Framework.
      - Now using AnnotationUtils.findAnnotation() instead of
        Class.isAnnotationPresent() where appropriate in the TestContext
        Framework.
      - Introduced findAnnotationPrefersInteracesOverLocalMetaAnnotations() in
        AnnotationUtilsTests in order to verify the status quo.
      - AnnotationUtils.findAnnotationDeclaringClass() and
        AnnotationUtils.findAnnotationDeclaringClassForTypes() now support
        meta annotations.
      - Introduced MetaAnnotationUtils and AnnotationDescriptor in the
        spring-test module.
      - Introduced UntypedAnnotationDescriptor in MetaAnnotationUtils.
      - Introduced findAnnotationDescriptorForTypes() in MetaAnnotationUtils.
      - ContextLoaderUtils now uses MetaAnnotationUtils for looking up
        @ActiveProfiles as a potential meta-annotation.
      - TestContextManager now uses MetaAnnotationUtils for looking up
        @TestExecutionListeners as a potential meta-annotation.
      - DirtiesContextTestExecutionListener now uses AnnotationUtils for
        looking up @DirtiesContext as a potential meta-annotation.
      - Introduced DirtiesContextTestExecutionListenerTests.
      - ProfileValueUtils now uses AnnotationUtils for looking up
        @IfProfileValue and @ProfileValueSourceConfiguration as potential
        meta-annotations.
      - @BeforeTransaction and @AfterTransaction now support ANNOTATION_TYPE
        as a target, allowing them to be used as meta-annotations.
      - TransactionalTestExecutionListener now uses AnnotationUtils for
        looking up @BeforeTransaction, @AfterTransaction, @Rollback, and
        @TransactionConfiguration as potential meta-annotations.
      - Introduced TransactionalTestExecutionListenerTests.
      - @Repeat and @Timed now support ANNOTATION_TYPE as a target, allowing
        them to be used as meta-annotations.
      - SpringJUnit4ClassRunner now uses AnnotationUtils for looking up
        @Repeat and @Timed as potential meta-annotations.
      - Moved all remaining logic for building the MergedContextConfiguration
        from the DefaultTestContext constructor to
        ContextLoaderUtils.buildMergedContextConfiguration().
      - Verified meta-annotation support for @WebAppConfiguration and
        @ContextConfiguration.
      
      Issue: SPR-7827
      5e7021f3
  17. 27 10月, 2013 1 次提交
    • S
      Convert TestContext to interface & default impl · 88fe2e9b
      Sam Brannen 提交于
      Since the Spring TestContext Framework was introduced in Spring
      Framework 2.5, the TestContext class has always been a public class
      with package private constructors. The visibility of TestContext's
      constructor and methods was intentionally limited in order to hide the
      implementation details of the context cache, etc. However, this fact
      has made it difficult (if not impossible) to unit test custom
      TestExecutionListener implementations.
      
      This commit addresses this issue by converting TestContext into a
      public interface with a package private DefaultTestContext
      implementation. This enables unit testing of any components that depend
      on a TestContext (e.g., TestExecutionListeners) while at the same time
      preserving the encapsulation of the inner workings of the TestContext
      implementation with regard to context loading and caching.
      
      Issue: SPR-7692
      88fe2e9b
  18. 22 10月, 2013 1 次提交
    • S
      Assert context uniqueness against merged config · 7658d856
      Sam Brannen 提交于
      Prior to this commit, the uniqueness check for @ContextConfiguration
      attributes within a @ContextHierarchy was performed at a single test
      class level instead of against the merged configuration for all test
      class levels in the test class hierarchy.
      
      This commit addresses this issue by moving the uniqueness check
      algorithm from resolveContextHierarchyAttributes() to
      buildContextHierarchyMap() within ContextLoaderUtils.
      
      Issue: SPR-10997
      7658d856
  19. 08 10月, 2013 1 次提交
    • B
      Fix MockHttpServletResponse HTTP status update · e4479c86
      Brian Clozel 提交于
      Prior to this commit, one could call the setStatus method on
      this Mock object and update the response's status,
      even though the sendError method had already been called.
      
      According to the HttpServletResponse Javadoc, sendError() methods
      commit the response; so the response can't be written after that.
      
      This commit fixes MockHttpServletResponse's behavior; setStatus
      methods do not update the status once the response has been
      committed.
      
      Issue: SPR-10414
      e4479c86
  20. 25 9月, 2013 1 次提交
  21. 12 9月, 2013 1 次提交
    • S
      Exclude null requestURI in MHSR.getRequestURL() · ee5d6c8f
      Sam Brannen 提交于
      This commit undoes the changes made in ec5d81e7 and ensures that the
      getRequestURL() method in MockHttpServletRequest does not include the
      String "null" for a null requestURI by first checking if the requestURI
      contains text before including it in the composed URL.
      
      Issue: SPR-10643
      ee5d6c8f
  22. 17 6月, 2013 3 次提交
  23. 16 6月, 2013 2 次提交
    • S
      Reduce complexity in ContextLoaderUtilsTests · 432f899b
      Sam Brannen 提交于
      This commit refactors ContextLoaderUtilsTests into
      AbstractContextLoaderUtilsTests and several specialized subclasses in
      order to reduce to the growing complexity of ContextLoaderUtilsTests.
      432f899b
    • S
      Introduce ActiveProfilesResolver in the TCF · 044f5128
      Sam Brannen 提交于
      Prior to this commit, the active bean definition profiles to use when
      loading an ApplicationContext for tests could only be configured
      declaratively (i.e., via hard-coded values supplied to the 'value' or
      'profiles' attribute of @ActiveProfiles).
      
      This commit makes it possible to programmatically configure active bean
      definition profiles in tests via a new ActiveProfileResolver interface.
      Custom resolvers can be registered via a new 'resolver' attribute
      introduced in @ActiveProfiles.
      
      Overview of changes:
      
       - Introduced a new ActiveProfilesResolver API.
       - Added a 'resolver' attribute to @ActiveProfiles.
       - Updated ContextLoaderUtils.resolveActiveProfiles() to support
         ActiveProfilesResolvers.
       - Documented these new features in the reference manual.
       - Added new content to the reference manual regarding the
         'inheritProfiles' attribute of @ActiveProfiles
       - Removed the use of <lineannotation> Docbook markup in the testing
         chapter of the reference manual for Java code examples in order to
         allow comments to have proper syntax highlighting in the generated
         HTML and PDF.
      
      Issue: SPR-10338
      044f5128
  24. 09 6月, 2013 4 次提交
    • S
      Throw ISEs in MockHttpSession for invalid session · 51d82881
      Sam Brannen 提交于
      The Javadoc for several methods in HttpSession specifies that an
      IllegalStateException must be thrown if the method is called on an
      invalidated session; however, Spring's MockHttpSession did not implement
      this behavior consistently prior to this commit.
      
      This commit therefore ensures that the following methods in
      MockHttpSession properly throw an IllegalStateException as defined in
      the Servlet specification.
      
       - long getCreationTime()
       - long getLastAccessedTime()
       - Object getAttribute(String)
       - Object getValue(String)
       - Enumeration<String> getAttributeNames()
       - String[] getValueNames()
       - void setAttribute(String, Object)
       - void putValue(String , Object)
       - void removeAttribute(String)
       - void removeValue(String)
       - void invalidate()
       - boolean isNew()
      
      Issue: SPR-7659
      51d82881
    • S
      Support implicit ports in MHSR.getRequestURL() · 86591e5e
      Sam Brannen 提交于
      Prior to this commit, MockHttpServletRequest.getRequestURL() always
      included the server port number in the reconstructed request URL, even
      for implicit ports (i.e., 80 and 443) and negative ports.
      
      MockHttpServletRequest.getRequestURL() now omits the port number when
      reconstructing a URL that has an implicit or negative port.
      
      Issue: SPR-9726
      86591e5e
    • S
      Add test to assess claim in SPR-10330 · b3a693e3
      Sam Brannen 提交于
      This commit verifies that JdbcTestUtils.readScript() properly handles
      SQL comments prefixed by tab characters.
      
      Issue: SPR-10330
      b3a693e3
    • S
      Polish method names in JdbcTestUtilsTests · bc9e4ab1
      Sam Brannen 提交于
      bc9e4ab1
  25. 14 5月, 2013 1 次提交