def _correct_parsers_in_order_specific_type(self, parser_cache, typ, specific_parsers_strict,<EOL>specific_parsers_non_strict = None):
strict = specific_parsers_non_strict is None<EOL>for ext in self.all_extensions:<EOL><INDENT>print('<STR_LIT>' + ('<STR_LIT>' if strict else '<STR_LIT>') + '<STR_LIT>'<EOL>+ get_pretty_type_str(typ) + '<STR_LIT>' + ext)<EOL>matching, no_type_match_but_ext_match, no_ext_match_but_type_match, no_match= parser_cache.find_all_matching_parsers(strict=strict, desired_type=typ, required_ext=ext)<EOL>print('<STR_LIT>')<EOL>generic = self.all_parsers_generic.copy()<EOL>for g in self.all_parsers_generic:<EOL><INDENT>if ext not in g.supported_exts:<EOL><INDENT>generic.remove(g)<EOL><DEDENT><DEDENT>self.assertEquals(set(matching[<NUM_LIT:0>]), generic)<EOL>if not strict:<EOL><INDENT>print('<STR_LIT>')<EOL>specific_nonstrict = specific_parsers_non_strict.copy()<EOL>for f in specific_parsers_non_strict:<EOL><INDENT>if ext not in f.supported_exts:<EOL><INDENT>specific_nonstrict.remove(f)<EOL><DEDENT><DEDENT>for t in specific_parsers_strict:<EOL><INDENT>if t in specific_nonstrict:<EOL><INDENT>specific_nonstrict.remove(t)<EOL><DEDENT><DEDENT>self.assertEquals(set(matching[<NUM_LIT:1>]), specific_nonstrict)<EOL><DEDENT>print('<STR_LIT>')<EOL>specific = specific_parsers_strict.copy()<EOL>for s in specific_parsers_strict:<EOL><INDENT>if ext not in s.supported_exts:<EOL><INDENT>specific.remove(s)<EOL><DEDENT><DEDENT>self.assertEquals(set(matching[<NUM_LIT:2>]), specific)<EOL><DEDENT>
Tests, for each extension available, that the find_all_matching_parsers query for type 'typ' and that extension
returns the correct results.
 * generic parsers first (all the ones from self.all_parsers_generic that support that file extension)
 * then specific non-strict (if that list is provided)
 * then the specific strict (that list should be provided

:param parser_cache:
:param typ:
:param specific_parsers_strict:
:param specific_parsers_non_strict:
:return: