Introduce arguments in compact constructor
diff --git a/src/main/java/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructor.java b/src/main/java/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructor.java
index 9f0e269..e1dcd3e 100644
--- a/src/main/java/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructor.java
+++ b/src/main/java/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructor.java
@@ -16,7 +16,9 @@
package org.yaml.snakeyaml.extensions.compactnotation;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -52,30 +54,36 @@
if (!scalar.endsWith(")")) {
return null;
}
- if (scalar.indexOf('=') < 0 || scalar.indexOf('(') < 0) {
+ if (scalar.indexOf('(') < 0) {
return null;
}
Matcher m = FIRST_PATTERN.matcher(scalar);
if (m.matches()) {
String tag = m.group(1);
String content = m.group(3);
+ CompactData data = new CompactData(tag);
+ if (content.length() == 0)
+ return data;
String[] names = content.split("\\s*,\\s*");
if (names.length == 0) {
return null;
}
- CompactData data = new CompactData(tag);
for (int i = 0; i < names.length; i++) {
String section = names[i];
- Matcher sm = PROPERTY_NAME_PATTERN.matcher(section);
- if (sm.matches()) {
- String name = sm.group(1);
- String value = sm.group(2).trim();
- if ("".equals(value)) {
+ if (section.indexOf('=') < 0) {
+ data.getArguments().add(section);
+ } else {
+ Matcher sm = PROPERTY_NAME_PATTERN.matcher(section);
+ if (sm.matches()) {
+ String name = sm.group(1);
+ String value = sm.group(2).trim();
+ if ("".equals(value)) {
+ return null;
+ }
+ data.getProperties().put(name, value);
+ } else {
return null;
}
- data.getProperties().put(name, value);
- } else {
- return null;
}
}
return data;
@@ -85,6 +93,7 @@
class CompactData {
private String prefix;
+ private List<String> arguments = new ArrayList<String>();
private Map<String, String> properties = new HashMap<String, String>();
public CompactData(String prefix) {
@@ -107,6 +116,14 @@
this.properties = properties;
}
+ public List<String> getArguments() {
+ return arguments;
+ }
+
+ public void setArguments(List<String> arguments) {
+ this.arguments = arguments;
+ }
+
@Override
public String toString() {
return "CompactData: " + prefix + " " + properties;
diff --git a/src/test/java/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructorTest.java b/src/test/java/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructorTest.java
index 2e3301e..75a7c87 100644
--- a/src/test/java/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructorTest.java
+++ b/src/test/java/org/yaml/snakeyaml/extensions/compactnotation/CompactConstructorTest.java
@@ -24,7 +24,6 @@
public void testNoCompactData() {
CompactConstructor flow = new CompactConstructor();
- assertNull(flow.getCompactData("JFrame()"));
assertNull(flow.getCompactData("scalar"));
assertNull(flow.getCompactData("123"));
assertNull(flow.getCompactData("(name=frame,title=My Frame)"));
@@ -35,7 +34,6 @@
assertNull(flow.getCompactData("JFrame(name=frame,title=My Frame) "));
assertNull(flow.getCompactData("JFrame(name=)"));
assertNull(flow.getCompactData("JFrame(=name)"));
- assertNull(flow.getCompactData("JFrame(name)"));
}
public void testGetCompactData1() {
@@ -70,4 +68,34 @@
assertEquals("My Frame", data.getProperties().get("title"));
assertEquals("123", data.getProperties().get("number"));
}
+
+ public void testGetCompactData4() {
+ CompactConstructor flow = new CompactConstructor();
+ CompactData data = flow.getCompactData("JFrame(title)");
+ assertNotNull(data);
+ assertEquals("JFrame", data.getPrefix());
+ assertEquals(0, data.getProperties().size());
+ assertEquals(1, data.getArguments().size());
+ assertEquals("title", data.getArguments().get(0));
+ }
+
+ public void testGetCompactData5() {
+ CompactConstructor flow = new CompactConstructor();
+ CompactData data = flow.getCompactData("JFrame(id123, title, name=foo, alignment=center)");
+ assertNotNull(data);
+ assertEquals("JFrame", data.getPrefix());
+ assertEquals(2, data.getProperties().size());
+ assertEquals(2, data.getArguments().size());
+ assertEquals("id123", data.getArguments().get(0));
+ assertEquals("title", data.getArguments().get(1));
+ }
+
+ public void testGetCompactData6() {
+ CompactConstructor flow = new CompactConstructor();
+ CompactData data = flow.getCompactData("JFrame()");
+ assertNotNull(data);
+ assertEquals("JFrame", data.getPrefix());
+ assertEquals(0, data.getProperties().size());
+ assertEquals(0, data.getArguments().size());
+ }
}
diff --git a/src/test/resources/compactnotation/container1.yaml b/src/test/resources/compactnotation/container1.yaml
index 398fd80..d1d7f65 100644
--- a/src/test/resources/compactnotation/container1.yaml
+++ b/src/test/resources/compactnotation/container1.yaml
@@ -1,4 +1,4 @@
-Container(name=parent, id=123):
+Container(title, name=parent, id=123):
components:
- Component(name=open, id=111)
- Component(name=close, id=222)