Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -770,4 +770,53 @@ private static int generateRandomArray(XContentBuilder builder, int level) throw
return tokens;
}

public void testYamlBooleanParsing() throws IOException {
// YAML boolean true values per SnakeYAML's Resolver.BOOL regex
String[] truthyValues = { "true", "True", "TRUE", "yes", "Yes", "YES", "on", "On", "ON" };
// YAML boolean false values per SnakeYAML's Resolver.BOOL regex
String[] falsyValues = { "false", "False", "FALSE", "no", "No", "NO", "off", "Off", "OFF" };

for (String value : truthyValues) {
String yaml = "---\nfield: " + value + "\n";
try (XContentParser parser = createParser(YamlXContent.yamlXContent, yaml)) {
assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken());
assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken());
assertEquals("field", parser.currentName());
XContentParser.Token token = parser.nextToken();
assertEquals("Expected VALUE_BOOLEAN token for '" + value + "'", XContentParser.Token.VALUE_BOOLEAN, token);
assertTrue("Expected '" + value + "' to be a boolean value", parser.isBooleanValue());
assertTrue("Expected '" + value + "' to parse as true", parser.booleanValue());
assertEquals("Expected text() to preserve original value", value, parser.text());
}
}

for (String value : falsyValues) {
String yaml = "---\nfield: " + value + "\n";
try (XContentParser parser = createParser(YamlXContent.yamlXContent, yaml)) {
assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken());
assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken());
assertEquals("field", parser.currentName());
XContentParser.Token token = parser.nextToken();
assertEquals("Expected VALUE_BOOLEAN token for '" + value + "'", XContentParser.Token.VALUE_BOOLEAN, token);
assertTrue("Expected '" + value + "' to be a boolean value", parser.isBooleanValue());
assertFalse("Expected '" + value + "' to parse as false", parser.booleanValue());
assertEquals("Expected text() to preserve original value", value, parser.text());
}
}

// Values that should NOT be treated as booleans
String[] nonBooleans = { "truthy", "nope", "yep", "often", "None", "NOTICE", "trUe", "fAlse", "TruE", "y", "Y", "n", "N" };
for (String value : nonBooleans) {
String yaml = "---\nfield: " + value + "\n";
try (XContentParser parser = createParser(YamlXContent.yamlXContent, yaml)) {
assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken());
assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken());
assertEquals("field", parser.currentName());
parser.nextToken();
assertFalse("Expected '" + value + "' to NOT be a boolean value", parser.isBooleanValue());
assertEquals(value, parser.text());
}
}
}

}
Loading