Skip to content

Commit

Permalink
#134 empty values improvement: complain on empty/null key
Browse files Browse the repository at this point in the history
  • Loading branch information
amihaiemil committed Apr 11, 2020
1 parent 14c377c commit e6b15bb
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 4 deletions.
4 changes: 4 additions & 0 deletions src/main/java/com/amihaiemil/eoyaml/BaseScalar.java
Original file line number Diff line number Diff line change
Expand Up @@ -134,4 +134,8 @@ String indent(final int indentation) {
return printed.toString();
}

@Override
final boolean isEmpty() {
return this.value() == null || this.value().trim().isEmpty();
}
}
5 changes: 5 additions & 0 deletions src/main/java/com/amihaiemil/eoyaml/BaseYamlMapping.java
Original file line number Diff line number Diff line change
Expand Up @@ -283,4 +283,9 @@ public final String toString() {
print.append(this.indent(0));
return print.toString();
}

@Override
final boolean isEmpty() {
return this.keys().isEmpty();
}
}
6 changes: 6 additions & 0 deletions src/main/java/com/amihaiemil/eoyaml/BaseYamlNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@
*/
abstract class BaseYamlNode implements YamlNode {

/**
* Is this YamlNode empty?
* @return True or false.
*/
abstract boolean isEmpty();

/**
* Print this YAML node with the given indentation.
* When implementing this method, make sure to only use
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/amihaiemil/eoyaml/BaseYamlSequence.java
Original file line number Diff line number Diff line change
Expand Up @@ -253,4 +253,9 @@ public final String toString() {
print.append(this.indent(0));
return print.toString();
}

@Override
final boolean isEmpty() {
return this.values().isEmpty();
}
}
5 changes: 5 additions & 0 deletions src/main/java/com/amihaiemil/eoyaml/BaseYamlStream.java
Original file line number Diff line number Diff line change
Expand Up @@ -201,4 +201,9 @@ final String indent(final int indentation) {
public final String toString() {
return this.indent(0);
}

@Override
final boolean isEmpty() {
return this.values().isEmpty();
}
}
13 changes: 9 additions & 4 deletions src/main/java/com/amihaiemil/eoyaml/RtYamlMappingBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,15 @@ public YamlMappingBuilder add(final String key, final YamlNode value) {

@Override
public YamlMappingBuilder add(final YamlNode key, final YamlNode value) {
final Map<YamlNode, YamlNode> withAddedPair = new LinkedHashMap<>();
withAddedPair.putAll(this.pairs);
withAddedPair.put(key, value);
return new RtYamlMappingBuilder(withAddedPair);
if(key == null || ((BaseYamlNode) key).isEmpty()) {
throw new IllegalArgumentException(
"The key in YamlMapping cannot be null or empty!"
);
}
final Map<YamlNode, YamlNode> withAdded = new LinkedHashMap<>();
withAdded.putAll(this.pairs);
withAdded.put(key, value);
return new RtYamlMappingBuilder(withAdded);
}

@Override
Expand Down
46 changes: 46 additions & 0 deletions src/test/java/com/amihaiemil/eoyaml/RtYamlMappingBuilderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@

import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;

/**
* Unit tests for {@link RtYamlMappingBuilder}.
Expand Down Expand Up @@ -140,4 +142,48 @@ public void buildsYamlMappingWithComment() {
Matchers.equalTo("some test mapping")
);
}

/**
* RtYamlMappingBuilder should complain when a null key is provided.
*/
@Test
public void complainsOnNullKey() {
final YamlNode key = null;
try {
final YamlMapping mapping = new RtYamlMappingBuilder()
.add(key, "value")
.build("some test mapping");
Assert.fail("IAE was expected!");
} catch (final IllegalArgumentException ex) {
MatcherAssert.assertThat(
ex.getMessage(),
Matchers.equalTo(
"The key in YamlMapping cannot be null or empty!"
)
);
}
}

/**
* RtYamlMappingBuilder should complain when an empty key is provided.
*/
@Test
public void complainsOnEmptyKey() {
final BaseYamlNode key = Mockito.mock(BaseYamlNode.class);
Mockito.when(key.isEmpty()).thenReturn(true);
try {
final YamlMapping mapping = new RtYamlMappingBuilder()
.add(key, "value")
.build("some test mapping");
Assert.fail("IAE was expected!");
} catch (final IllegalArgumentException ex) {
MatcherAssert.assertThat(
ex.getMessage(),
Matchers.equalTo(
"The key in YamlMapping cannot be null or empty!"
)
);
}
}

}

0 comments on commit e6b15bb

Please sign in to comment.