plantuml/test/net/sourceforge/plantuml/tim/stdlib/JsonRemoveTest.java

87 lines
3.3 KiB
Java

package net.sourceforge.plantuml.tim.stdlib;
import static net.sourceforge.plantuml.tim.TimTestUtils.assertTimExpectedOutputFromInput;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores;
import org.junit.jupiter.api.IndicativeSentencesGeneration;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.converter.ConvertWith;
import org.junit.jupiter.params.provider.CsvSource;
import net.sourceforge.plantuml.json.JsonValue;
import net.sourceforge.plantuml.tim.EaterException;
import net.sourceforge.plantuml.tim.TFunction;
import test.utils.JunitUtils.StringJsonConverter;
/**
* Tests the builtin function.
*/
@IndicativeSentencesGeneration(separator = ": ", generator = ReplaceUnderscores.class)
class JsonRemoveTest {
TFunction cut = new JsonRemove();
final String cutName = "json_remove";
final String paramTestName = "[{index}] " + cutName + "({0}, {1}) = {2}";
@ParameterizedTest(name = paramTestName)
@CsvSource(value = {
" [], -1, []",
" [], 1, []",
" [0], 0, [] ",
" [0], 1, [0] ",
" '[1,2,3]', -1, '[1,2,3]' ", // To debate...
" '[1,2,3]', 0, '[2,3]' ",
" '[1,2,3]', 1, '[1,3]' ",
" '[1,2,3]', 2, '[1,2]' ",
" '[1,2,3]', 3, '[1,2,3]' ",
" '[{\"a\":[1, 2]}, 1, \"a\"]', 2, '[{\"a\":[1,2]},1]' ",
})
void Test_with_Array_Json(@ConvertWith(StringJsonConverter.class) JsonValue input1, Integer input2, String expected) throws EaterException {
assertTimExpectedOutputFromInput(cut, input1, input2, expected);
}
@ParameterizedTest(name = paramTestName)
@CsvSource(value = {
" '{\"z\":0,\"a\":1}', a, '{\"z\":0}'",
" '{\"z\":0,\"a\":1}', b, '{\"z\":0,\"a\":1}'",
" '{\"a\": 1, \"b\": \"two\",\"c\":3}', c, '{\"a\":1,\"b\":\"two\"}'",
" '{\"a\":1,\"b\":\"two\",\"d\":{\"da\":1,\"db\":\"two\"}}', d, '{\"a\":1,\"b\":\"two\"}'",
})
void Test_with_Object_Json(@ConvertWith(StringJsonConverter.class) JsonValue input1, String input2, String expected) throws EaterException {
assertTimExpectedOutputFromInput(cut, input1, input2, expected);
}
@Nested
class Not_Nominal_Test {
@ParameterizedTest(name = paramTestName)
@CsvSource(value = {
" [], a, []",
" '[1,2,3]', abc, '[1,2,3]' ",
" '[1,2,3]', 1, '[1,2,3]' ",
" 123, 1, 123",
" true, a, true",
" true, 1, true",
" \"abc\", a, abc",
" \"a b c\", a, a b c",
" \"a b c\", 1, a b c",
})
void Test_with_not_good_type(@ConvertWith(StringJsonConverter.class) JsonValue input1, String input2, String expected) throws EaterException {
assertTimExpectedOutputFromInput(cut, input1, input2, expected);
}
@ParameterizedTest(name = paramTestName)
@CsvSource(value = {
" '{\"z\":0,\"a\":1}', 5, '{\"z\":0,\"a\":1}'",
" '{\"z\":0,\"5\":1}', 5, '{\"z\":0}'", // Allow cast int -> string
" '{\"a\": 1, \"b\": \"two\",\"c\":3}', 10, '{\"a\":1,\"b\":\"two\",\"c\":3}'",
})
void Test_with_not_good_type(@ConvertWith(StringJsonConverter.class) JsonValue input1, Integer input2, String expected) throws EaterException {
assertTimExpectedOutputFromInput(cut, input1, input2, expected);
}
}
}