Search code examples
javahamcrest

java.util.IllegalFormatFlagsException: Flags = ' '


I'm using hamcrest matchers to compare 2 list<String>

List<String> oldProductNames = (List<String>) ConfigurationManager.getBundle()
            .getProperty("productName");

Reporter.log("Unsorted Product Name : " + oldProductNames);
Collections.sort(oldProductNames);
Reporter.log("Sorted Product Name : " + oldProductNames);

List<String> sortedList = getAllProductNamesFromListing("excludeOOS");
Reporter.log("Sorted By Web Site : " + sortedList);

assertThat(oldProductNames, contains(sortedList.toArray()));

Output looks like :

Unsorted Product Name : [nehatestbundlenew2, nehatestbundlenew, beurre de cacahuètes 100% naturel, beurre d'amandes grillées 1 kg, beurre de noix de cajou grillées 1 kg, nuts about whey™, beurre de noisettes 1 kg, beurre de cacahuètes aux 4 graines, beurre de noisettes grillées au chocolat noir, beurre de pistache grillées 1 kg, beurre d'amandes grillées au chocolat noir, beurre d'amandes - noisettes - cajou, beurre de cacahuète à la noix de coco]


Sorted Product Name : [beurre d'amandes - noisettes - cajou, beurre d'amandes grillées 1 kg, beurre d'amandes grillées au chocolat noir, beurre de cacahuète à la noix de coco, beurre de cacahuètes 100% naturel, beurre de cacahuètes aux 4 graines, beurre de noisettes 1 kg, beurre de noisettes grillées au chocolat noir, beurre de noix de cajou grillées 1 kg, beurre de pistache grillées 1 kg, nehatestbundlenew, nehatestbundlenew2, nuts about whey™]


Sorted By Web Site : [beurre d'amandes - noisettes - cajou, beurre d'amandes grillées 1 kg, beurre d'amandes grillées au chocolat noir, beurre de cacahuète à la noix de coco, beurre de cacahuètes 100% naturel, beurre de cacahuètes aux 4 graines, beurre de noisettes 1 kg, beurre de noisettes grillées au chocolat noir, beurre de noix de cajou grillées 1 kg, beurre de pistache grillées 1 kg, nehatestbundlenew, nehatestbundlenew2, nuts about whey™]

But below error for assertThat(oldProductNames, contains(sortedList.toArray()));

java.util.IllegalFormatFlagsException: Flags = ' '


Solution

  • When using assertThat(oldProductNames, contains(sortedList.toArray()));
    You are following this pattern assertThat(actual, contains(expected));

    oldProductNames contains % signs and when passing this into the assertThat method you are actually passing a format specifier in.

    As a result of this, immediate space following the said format specifier is picked up by the java.util.IllegalFormatFlagsException as a leading space causing this exception to be thrown.