Add PathResourceResolver conditionally

The ResourceHandlerRegistration now checks if the last resolver is an
instance of PathResourceResolver and if so it skips adding it.

This change also creates and adds the VersionResourceResolver (as well
as CssLinkTransformer) the first time any VersionStrategy is
registered. This ensures that custom resolvers (including an extension
of PathResourceResolver) may be added both before and after the
VersionResourceResolver.

Lastly this change renames addVersion and addVersionHash to be
consistent with addVersionStrategy.

Issue: SPR-12124
Honor scheme in MockHttpServletRequest.isSecure()

Prior to this commit the implementation of isSecure() in
MockHttpServletRequest simply returned the value of the 'secure'
boolean flag. Thus setting the scheme to 'https' had no effect on the
value returned by isSecure() even though most non-mock implementations
(e.g., Tomcat, Jetty, etc.) base the return value on the actual scheme
in the request.

This commit makes the behavior of MockHttpServletRequest.isSecure()
more intuitive by honoring both the 'secure' boolean flag and the
current value of the scheme.

Issue: SPR-12098
Move builder methods to VersionResourceResolver

This change moves the VersionStrategy builder-style methods from
ResourceHandlerRegistration to VersionResourceResolver.

This makes the methods more universally usable and also makes use of
ResourceHandlerRegistration more readable, i.e. simply a sequence of
addResource and addTransformer calls.
Update resource handler Java config

This change separates out resource chain related methods previously in
ResourceHandlerRegistration into a new class ResourceChainRegistration
with the goal of improving readability.

Along with that, the registration of caching resolver and transformer
is now explicitly controled with a boolean flag (on the method used
to obtain the ResourceChainRegistration) and an overloaded method
also allows providing a Cache instance.

Issue: SPR-12124
Support port URI template variables

This commit makes it possible to specify port with an URI template variable.

For example :
RestTemplate restTemplate = new RestTemplate();
restTemplate.getForObject("http://localhost:{port}/resource", String.class, 8080);

Issue: SPR-12123
Update port related code in UriComponentsBuilder

Use null to indicate no port has been provided.
Raise exception when port has not been expanded.

Issue: SPR-12123
Update Javadoc for AssertThrows
Discontinue use of deprecated AssertThrows

This commit refactors ReflectionTestUtilsTests so that it no longer uses
the deprecated AssertThrows class.
Refactor AssertThrows to support Throwable

Prior to this commit, AssertThrows in the spring-test module only
supported Exception; however, there are legitimate test cases where the
subject under test (SUT) may potentially throw a subclass of Throwable.

This commit refactors AssertThrows so that it supports exceptions of
type Throwable instead of the limiting support for Exception.
Furthermore, AssertThrows has been refactored to use generics (e.g.,
Class<? extends Throwable> instead of merely Class).

Issue: SPR-6362
Update resource handler XML Namespace

This change introduces a new <mvc:resource-chain/> tag that mirrors
the ResourceChainRegistration java config counterpart.

Resolvers and Transformers can be registered with bean/ref tags, and
specific tags have been created for <mvc:version-resovlver> and
<mvc:resource-cache> in order to make common configurations easier.

Note that a specific "auto-configuration" attribute on the
resource-chain allows to completely disable default registration of
Resolvers and Transformers (sane defaults considered by the Framework).

  <mvc:resources mapping="/resources/**" location="/, classpath:/META-INF/">
      <mvc:resource-chain>
        <mvc:resource-cache cache="resourceCache"/>
        <mvc:resolvers>
          <mvc:version-resolver>
            <mvc:fixed-version-strategy version="abc" patterns="/**/*.js"/>
            <mvc:content-version-strategy patterns="/**"/>
          </mvc:version-resolver>
        </mvc:resolvers>
        <mvc:transformers>
          <bean class="org.springframework.web.servlet.resource.AppCacheManifestTransformer"/>
        </mvc:transformers>
      </mvc:resource-chain>
  </mvc:resources>

This also fixes a typo in the class name of
AppCacheManifestResourceTransfo*r*mer.

Issue: SPR-12129
Remove assertion on number of resource locations

With the new ResourceResolver abstraction and resource resolver chain
in 4.1, the assumption that resources are found by checking for the URL
path under the configured locations is no longer accurate.

A custom ResourceResolver could find resources in ways that don't
depend on a list of locations.

Issuse: SPR-12133
Change resource handler XML Namespace

This commit changes the way a <mvc:resource-cache> can be configured
with a user defined Cache instance.

Now a reference to a CacheManager Bean and a Cache name must be
provided. This is a more flexible configuration for typical XML setups.

  <mvc:resource-cache
    cache-manager="resourceCache"
    cache-name="test-resource-cache"/>

Issue: SPR-12129
Fix typos in reference manual

manger --> manager
Revise JUnit vs. Spring timeout support in reference manual

Prior to this commit, the discussion of JUnit vs. Spring with regard to
timeout support in tests erroneously claimed that Spring's support for
JUnit's @Test(timeout=...) did not include set up and tear down or
repetitions. This information, however, was based on a previous version
of SpringJUnit4ClassRunner and is no longer valid.

This commit revises the affected section of the testing chapter in the
reference manual accordingly.
Add HTTP status to ServletRequestHandledEvent

Issue: SPR-12119
Polish Javadoc for @Sql and SqlScriptsTestExecutionListener
Document @Sql script support in the reference manual

 - Introduced a new "Executing SQL scripts" section in the Testing
   chapter with a subsection covering programmatic script execution via
   ResourceDatabasePopulator, ScriptUtils, etc. and a subsection
   dedicated to the new declarative support via @Sql.

 - Documented @Sql, @SqlConfig, and @SqlGroup in the "Annotations" and
   "Meta-annotation" sections.

 - Fixed broken cross-reference links to "false positives" with ORM tip.

 - Documented methods in JdbcTestUtils.

 - Improved layout and information in sections covering
   AbstractTransactionalJUnit4SpringContextTests and
   AbstractTransactionalTestNGSpringContextTests.

Issue: SPR-11849
Document Groovy script support in the TCF

This commit documents support for using Groovy scripts to load
ApplicationContexts using the Spring TestContext Framework (TCF) in the
reference manual.

Issue: SPR-12027
Polish Javadoc for MergedContextConfiguration
Document @TestPropertySource support in the reference manual

This commit introduces a new "Context configuration with test property
sources" section in the Testing chapter of the reference manual.

In addition, the "Context caching" section has been updated regarding
support for test property source locations and properties in
MergedContextConfiguration.

Issue: SPR-12076