Tapestry
  1. Tapestry
  2. TAPESTRY-1028

Unit tests using JSONObject.toString are fragile & may break in different environments.

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 4.1
    • Fix Version/s: 4.1.1
    • Component/s: None
    • Labels:
      None
    • Environment:
      Windows XP, JDK 1.5.0_06

      Description

      JSONObject.toString writes out its contents by iterating thru the keys of its internal HashMap. However the HashMap class makes no guarantees about the ordering of iterators, so the keys + values may be written out in any order.

      The trouble is that the unit tests compare JSONObject.toString to hardcoded strings. If the iteration order happens to match the test string then all is well. If it doesn't match then the tests fail, even tho the functionality being tested is working correctly.

      1. TAP-1028.patch
        16 kB
        Ben Sommerville

        Activity

        Hide
        Ben Sommerville added a comment -

        Patch to fix the failing tests.

        The fix is for the JSONObject to use LinkedHashMap internally. This provides a guaranteed iteration order & allows the tests to work in any environment.

        There were 2 other tests did not involve JSONObject that were failing.

        ClientPropertyPersistenceStrategyTest failed for the same reason (iteration order of the _data HashMap). Fixed it by changing _data to LinkedHashMap as well.

        TestDateValidator.testToObjectInvalid also failed. In this case because the actual message said "Format is MM/DD/YYYY" rather than "Format is MM/dd/yyyy.". Fixed this by changing the expected value of the message.

        Show
        Ben Sommerville added a comment - Patch to fix the failing tests. The fix is for the JSONObject to use LinkedHashMap internally. This provides a guaranteed iteration order & allows the tests to work in any environment. There were 2 other tests did not involve JSONObject that were failing. ClientPropertyPersistenceStrategyTest failed for the same reason (iteration order of the _data HashMap). Fixed it by changing _data to LinkedHashMap as well. TestDateValidator.testToObjectInvalid also failed. In this case because the actual message said "Format is MM/DD/YYYY" rather than "Format is MM/dd/yyyy.". Fixed this by changing the expected value of the message.
        Hide
        Jesse Kuhnert added a comment -

        Patch applied, thanks.

        Show
        Jesse Kuhnert added a comment - Patch applied, thanks.

          People

          • Assignee:
            Jesse Kuhnert
            Reporter:
            Ben Sommerville
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development