e2e: add end-to-end test for root page

This works by injecting JavaScript code into the running browser to
configure the $httpBackend service.

This is done using the addMockModule protractor method which installs
code to run *before* Angular has been loaded. The code is run before
every browser.get call.

The page much include angular-mocks.js for this to work. This script
is added to the page before each test is run. If multiple tests are
run the file would be added multiple times since the browser doesn't
do a full page refresh between the tests.
e2e: test sorting container listing by count and size

For the size column, we cannot use the by.repeater(...) helper locator
since the column method doesn't work when there's no content to match
on. We select the column by CSS instead then -- this will of course
break if the columns are ever reordered, but the breakage will be easy
fix then.
e2e: move test setup code to its own file

The plan is to slowly build the infrastructure to simulate Swift.
e2e: update protractor version to ~1.0.0

This is to get support for the third argument in addMockModule. In

  https://github.com/angular/protractor/commit/b7afa8791ba9

support was introduced for passing arguments to the initialization
code for the mock module. We will use this to pass in the containers
for the Swift simulator -- today we do this by actually hard-coding
the container list inside the mock module initialization function.

Remember run 'npm update protractor' to install the new version.

The new version of protractor will warn if a locator selected more
than one element. This is why we need to use a more precise CSS
expression when selecting the first table header.
e2e: move $httpBackend configuration inside SwiftSimulator

This moves more boiler-plate code away from the tests and into the
SwiftSimulator. This requires Protractor version 0.23.0 or later,
we're now using 1.0.0.

The special arguments array is a local variable automatically
available within all functions. We must bind it to a local variable to
access in the nested function, otherwise the inner arguments variable
would shadow the outer.
e2e: move getText mapper to top-level

We will soon need this function in other scenarios.
swift-simulator: don't add a catch-all rule by default

You now have to call the commit function to indicate that you're done
adding $httpBackend rules. This function will simply add the /.*/
catch-all rule that allows Angular to fetch templates and other files
from the local server when the tests run.

This was prompted by a desire to call setContainers and other
SwiftSimulator functions more than once. This doesn't work if they all
add the catch-all rule -- other rules added after it will never be
considered since the rules are evaluated by the order they are added.
swift-simulator: add setObjects function

Call this with a container name and a list of objects to define
suitable $httpBackend responses to query the objects. This is used to
test the sorting of object listing.

Pseudo-directories are not yet handled.
e2e: test sorting object listing by size
swift-simulator: handle pseudo-directories
protractor: use Firefox by default

This is the browser available on Travis.
travis: don't include base config again

The coverage config already includes the base config.
travis: run Karma with dots reporter

This looks better in the final report. The progress reporter we
accidentally used since 74995de18d gives a listing like this:

  SUCCESS (0 secs / 0.049 secs)
  SUCCESS (0 secs / 0.057 secs)
  SUCCESS (0 secs / 0.065 secs)
  SUCCESS (0 secs / 0.071 secs)

While the timings might be nice, they are less helpful when the test
name isn't printed.
karma: standardize on "key: value", not "key : value"
bootstrap: use local version for development

I've seen the CDN be a little slow and for development it is nicer to
use a non-minified version.
Merge pull request #16 from mgeisler/e2e

Add end to end tests
Merge pull request #17 from mgeisler/karma-conf

Small tweeks to the Karma conf
Merge pull request #19 from mgeisler/bootstrap-local

bootstrap: use local version for development
eslint: move globals definition to where it's needed
karma: assign required modules to local variable

ESLint flags these variables if they are not made local to the module.