Minor test fixes

I stopped replacing the
try {
  // something
  fail(...);
} catch(Exception e) { }
with the annotation equivalent after a few commits, so you can just ignore those first ones. I even changed some existing @Test(expected=...) to the other idiom for consistency.

I broke two tests that seemed not to do what they were supposed to. Both of them now fail with an exception.

The Range fix is the most interesting. I'm not 100% sure I know what it's supposed to do, so I'm not sure my changes make sense. At least they are consistent with the test and error message, and it made sense to me at least.

Most of the cleanups catch a more specific exception. I'm assuming that the exact exception should be caught whenever possible.