forked from loafle/openapi-generator-original
Fix implements in oneof, anyof templates in java okhttp client generator (#16241)
* fix implements in oneof, anyof templates in java okhttp * add tests * update samples
This commit is contained in:
parent
cb56e50e0c
commit
82516c75d2
@ -7,3 +7,4 @@ additionalProperties:
|
|||||||
artifactId: petstore-okhttp-gson
|
artifactId: petstore-okhttp-gson
|
||||||
hideGenerationTimestamp: "true"
|
hideGenerationTimestamp: "true"
|
||||||
supportStreaming: true
|
supportStreaming: true
|
||||||
|
serializableModel: true
|
||||||
|
@ -32,7 +32,7 @@ import com.google.gson.JsonParseException;
|
|||||||
import {{invokerPackage}}.JSON;
|
import {{invokerPackage}}.JSON;
|
||||||
|
|
||||||
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>xmlAnnotation}}
|
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>xmlAnnotation}}
|
||||||
public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-implements}}, {{{.}}}{{/vendorExtensions.x-implements}} {
|
public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-implements}} implements {{{.}}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-implements}} {
|
||||||
private static final Logger log = Logger.getLogger({{classname}}.class.getName());
|
private static final Logger log = Logger.getLogger({{classname}}.class.getName());
|
||||||
|
|
||||||
public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
|
public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
|
||||||
|
@ -34,7 +34,7 @@ import com.google.gson.JsonParseException;
|
|||||||
import {{invokerPackage}}.JSON;
|
import {{invokerPackage}}.JSON;
|
||||||
|
|
||||||
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>xmlAnnotation}}
|
{{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{>xmlAnnotation}}
|
||||||
public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-implements}}, {{{.}}}{{/vendorExtensions.x-implements}} {
|
public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-implements}} implements {{{.}}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-implements}} {
|
||||||
private static final Logger log = Logger.getLogger({{classname}}.class.getName());
|
private static final Logger log = Logger.getLogger({{classname}}.class.getName());
|
||||||
|
|
||||||
public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
|
public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
|
||||||
|
@ -77,3 +77,7 @@ components:
|
|||||||
type: boolean
|
type: boolean
|
||||||
type:
|
type:
|
||||||
type: string
|
type: string
|
||||||
|
SimpleOneOf:
|
||||||
|
oneOf:
|
||||||
|
- type: string
|
||||||
|
- type: integer
|
||||||
|
@ -6,6 +6,7 @@ api/openapi.yaml
|
|||||||
build.gradle
|
build.gradle
|
||||||
build.sbt
|
build.sbt
|
||||||
docs/PingApi.md
|
docs/PingApi.md
|
||||||
|
docs/SimpleOneOf.md
|
||||||
docs/SomeObj.md
|
docs/SomeObj.md
|
||||||
git_push.sh
|
git_push.sh
|
||||||
gradle.properties
|
gradle.properties
|
||||||
@ -35,4 +36,5 @@ src/main/java/org/openapitools/client/auth/Authentication.java
|
|||||||
src/main/java/org/openapitools/client/auth/HttpBasicAuth.java
|
src/main/java/org/openapitools/client/auth/HttpBasicAuth.java
|
||||||
src/main/java/org/openapitools/client/auth/HttpBearerAuth.java
|
src/main/java/org/openapitools/client/auth/HttpBearerAuth.java
|
||||||
src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java
|
src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java
|
||||||
|
src/main/java/org/openapitools/client/model/SimpleOneOf.java
|
||||||
src/main/java/org/openapitools/client/model/SomeObj.java
|
src/main/java/org/openapitools/client/model/SomeObj.java
|
||||||
|
@ -124,6 +124,7 @@ Class | Method | HTTP request | Description
|
|||||||
|
|
||||||
## Documentation for Models
|
## Documentation for Models
|
||||||
|
|
||||||
|
- [SimpleOneOf](docs/SimpleOneOf.md)
|
||||||
- [SomeObj](docs/SomeObj.md)
|
- [SomeObj](docs/SomeObj.md)
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,6 +80,10 @@ components:
|
|||||||
type:
|
type:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
|
SimpleOneOf:
|
||||||
|
oneOf:
|
||||||
|
- type: string
|
||||||
|
- type: integer
|
||||||
getPing_request:
|
getPing_request:
|
||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# SimpleOneOf
|
||||||
|
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
| Name | Type | Description | Notes |
|
||||||
|
|------------ | ------------- | ------------- | -------------|
|
||||||
|
|
||||||
|
|
||||||
|
## Implemented Interfaces
|
||||||
|
|
||||||
|
* Serializable
|
||||||
|
|
||||||
|
|
@ -22,4 +22,8 @@
|
|||||||
| SOMEOBJIDENTIFIER | "SomeObjIdentifier" |
|
| SOMEOBJIDENTIFIER | "SomeObjIdentifier" |
|
||||||
|
|
||||||
|
|
||||||
|
## Implemented Interfaces
|
||||||
|
|
||||||
|
* Serializable
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,6 +93,7 @@ public class JSON {
|
|||||||
gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter);
|
gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter);
|
||||||
gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter);
|
gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter);
|
||||||
gsonBuilder.registerTypeAdapter(byte[].class, byteArrayAdapter);
|
gsonBuilder.registerTypeAdapter(byte[].class, byteArrayAdapter);
|
||||||
|
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SimpleOneOf.CustomTypeAdapterFactory());
|
||||||
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SomeObj.CustomTypeAdapterFactory());
|
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SomeObj.CustomTypeAdapterFactory());
|
||||||
gson = gsonBuilder.create();
|
gson = gsonBuilder.create();
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,280 @@
|
|||||||
|
/*
|
||||||
|
* ping some object
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* The version of the OpenAPI document: 1.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
package org.openapitools.client.model;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import com.google.gson.JsonParseException;
|
||||||
|
import com.google.gson.TypeAdapter;
|
||||||
|
import com.google.gson.TypeAdapterFactory;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import com.google.gson.JsonPrimitive;
|
||||||
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import com.google.gson.stream.JsonReader;
|
||||||
|
import com.google.gson.stream.JsonWriter;
|
||||||
|
import com.google.gson.JsonDeserializationContext;
|
||||||
|
import com.google.gson.JsonDeserializer;
|
||||||
|
import com.google.gson.JsonSerializationContext;
|
||||||
|
import com.google.gson.JsonSerializer;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonParseException;
|
||||||
|
|
||||||
|
import org.openapitools.client.JSON;
|
||||||
|
|
||||||
|
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
|
||||||
|
public class SimpleOneOf extends AbstractOpenApiSchema implements Serializable {
|
||||||
|
private static final Logger log = Logger.getLogger(SimpleOneOf.class.getName());
|
||||||
|
|
||||||
|
public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
|
||||||
|
if (!SimpleOneOf.class.isAssignableFrom(type.getRawType())) {
|
||||||
|
return null; // this class only serializes 'SimpleOneOf' and its subtypes
|
||||||
|
}
|
||||||
|
final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
|
||||||
|
final TypeAdapter<String> adapterString = gson.getDelegateAdapter(this, TypeToken.get(String.class));
|
||||||
|
final TypeAdapter<Integer> adapterInteger = gson.getDelegateAdapter(this, TypeToken.get(Integer.class));
|
||||||
|
|
||||||
|
return (TypeAdapter<T>) new TypeAdapter<SimpleOneOf>() {
|
||||||
|
@Override
|
||||||
|
public void write(JsonWriter out, SimpleOneOf value) throws IOException {
|
||||||
|
if (value == null || value.getActualInstance() == null) {
|
||||||
|
elementAdapter.write(out, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if the actual instance is of the type `String`
|
||||||
|
if (value.getActualInstance() instanceof String) {
|
||||||
|
JsonPrimitive primitive = adapterString.toJsonTree((String)value.getActualInstance()).getAsJsonPrimitive();
|
||||||
|
elementAdapter.write(out, primitive);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// check if the actual instance is of the type `Integer`
|
||||||
|
if (value.getActualInstance() instanceof Integer) {
|
||||||
|
JsonPrimitive primitive = adapterInteger.toJsonTree((Integer)value.getActualInstance()).getAsJsonPrimitive();
|
||||||
|
elementAdapter.write(out, primitive);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw new IOException("Failed to serialize as the type doesn't match oneOf schemas: Integer, String");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SimpleOneOf read(JsonReader in) throws IOException {
|
||||||
|
Object deserialized = null;
|
||||||
|
JsonElement jsonElement = elementAdapter.read(in);
|
||||||
|
|
||||||
|
int match = 0;
|
||||||
|
ArrayList<String> errorMessages = new ArrayList<>();
|
||||||
|
TypeAdapter actualAdapter = elementAdapter;
|
||||||
|
|
||||||
|
// deserialize String
|
||||||
|
try {
|
||||||
|
// validate the JSON object to see if any exception is thrown
|
||||||
|
if(!jsonElement.getAsJsonPrimitive().isString()) {
|
||||||
|
throw new IllegalArgumentException(String.format("Expected json element to be of type String in the JSON string but got `%s`", jsonElement.toString()));
|
||||||
|
}
|
||||||
|
actualAdapter = adapterString;
|
||||||
|
match++;
|
||||||
|
log.log(Level.FINER, "Input data matches schema 'String'");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// deserialization failed, continue
|
||||||
|
errorMessages.add(String.format("Deserialization for String failed with `%s`.", e.getMessage()));
|
||||||
|
log.log(Level.FINER, "Input data does not match schema 'String'", e);
|
||||||
|
}
|
||||||
|
// deserialize Integer
|
||||||
|
try {
|
||||||
|
// validate the JSON object to see if any exception is thrown
|
||||||
|
if(!jsonElement.getAsJsonPrimitive().isNumber()) {
|
||||||
|
throw new IllegalArgumentException(String.format("Expected json element to be of type Number in the JSON string but got `%s`", jsonElement.toString()));
|
||||||
|
}
|
||||||
|
actualAdapter = adapterInteger;
|
||||||
|
match++;
|
||||||
|
log.log(Level.FINER, "Input data matches schema 'Integer'");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// deserialization failed, continue
|
||||||
|
errorMessages.add(String.format("Deserialization for Integer failed with `%s`.", e.getMessage()));
|
||||||
|
log.log(Level.FINER, "Input data does not match schema 'Integer'", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match == 1) {
|
||||||
|
SimpleOneOf ret = new SimpleOneOf();
|
||||||
|
ret.setActualInstance(actualAdapter.fromJsonTree(jsonElement));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IOException(String.format("Failed deserialization for SimpleOneOf: %d classes match result, expected 1. Detailed failure message for oneOf schemas: %s. JSON: %s", match, errorMessages, jsonElement.toString()));
|
||||||
|
}
|
||||||
|
}.nullSafe();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// store a list of schema names defined in oneOf
|
||||||
|
public static final Map<String, Class<?>> schemas = new HashMap<String, Class<?>>();
|
||||||
|
|
||||||
|
public SimpleOneOf() {
|
||||||
|
super("oneOf", Boolean.FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleOneOf(Integer o) {
|
||||||
|
super("oneOf", Boolean.FALSE);
|
||||||
|
setActualInstance(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleOneOf(String o) {
|
||||||
|
super("oneOf", Boolean.FALSE);
|
||||||
|
setActualInstance(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
schemas.put("String", String.class);
|
||||||
|
schemas.put("Integer", Integer.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Class<?>> getSchemas() {
|
||||||
|
return SimpleOneOf.schemas;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the instance that matches the oneOf child schema, check
|
||||||
|
* the instance parameter is valid against the oneOf child schemas:
|
||||||
|
* Integer, String
|
||||||
|
*
|
||||||
|
* It could be an instance of the 'oneOf' schemas.
|
||||||
|
* The oneOf child schemas may themselves be a composed schema (allOf, anyOf, oneOf).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setActualInstance(Object instance) {
|
||||||
|
if (instance instanceof String) {
|
||||||
|
super.setActualInstance(instance);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (instance instanceof Integer) {
|
||||||
|
super.setActualInstance(instance);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new RuntimeException("Invalid instance type. Must be Integer, String");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the actual instance, which can be the following:
|
||||||
|
* Integer, String
|
||||||
|
*
|
||||||
|
* @return The actual instance (Integer, String)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object getActualInstance() {
|
||||||
|
return super.getActualInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the actual instance of `String`. If the actual instance is not `String`,
|
||||||
|
* the ClassCastException will be thrown.
|
||||||
|
*
|
||||||
|
* @return The actual instance of `String`
|
||||||
|
* @throws ClassCastException if the instance is not `String`
|
||||||
|
*/
|
||||||
|
public String getString() throws ClassCastException {
|
||||||
|
return (String)super.getActualInstance();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get the actual instance of `Integer`. If the actual instance is not `Integer`,
|
||||||
|
* the ClassCastException will be thrown.
|
||||||
|
*
|
||||||
|
* @return The actual instance of `Integer`
|
||||||
|
* @throws ClassCastException if the instance is not `Integer`
|
||||||
|
*/
|
||||||
|
public Integer getInteger() throws ClassCastException {
|
||||||
|
return (Integer)super.getActualInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates the JSON Element and throws an exception if issues found
|
||||||
|
*
|
||||||
|
* @param jsonElement JSON Element
|
||||||
|
* @throws IOException if the JSON Element is invalid with respect to SimpleOneOf
|
||||||
|
*/
|
||||||
|
public static void validateJsonElement(JsonElement jsonElement) throws IOException {
|
||||||
|
// validate oneOf schemas one by one
|
||||||
|
int validCount = 0;
|
||||||
|
ArrayList<String> errorMessages = new ArrayList<>();
|
||||||
|
// validate the json string with String
|
||||||
|
try {
|
||||||
|
if(!jsonElement.getAsJsonPrimitive().isString()) {
|
||||||
|
throw new IllegalArgumentException(String.format("Expected json element to be of type String in the JSON string but got `%s`", jsonElement.toString()));
|
||||||
|
}
|
||||||
|
validCount++;
|
||||||
|
} catch (Exception e) {
|
||||||
|
errorMessages.add(String.format("Deserialization for String failed with `%s`.", e.getMessage()));
|
||||||
|
// continue to the next one
|
||||||
|
}
|
||||||
|
// validate the json string with Integer
|
||||||
|
try {
|
||||||
|
if(!jsonElement.getAsJsonPrimitive().isNumber()) {
|
||||||
|
throw new IllegalArgumentException(String.format("Expected json element to be of type Number in the JSON string but got `%s`", jsonElement.toString()));
|
||||||
|
}
|
||||||
|
validCount++;
|
||||||
|
} catch (Exception e) {
|
||||||
|
errorMessages.add(String.format("Deserialization for Integer failed with `%s`.", e.getMessage()));
|
||||||
|
// continue to the next one
|
||||||
|
}
|
||||||
|
if (validCount != 1) {
|
||||||
|
throw new IOException(String.format("The JSON string is invalid for SimpleOneOf with oneOf schemas: Integer, String. %d class(es) match the result, expected 1. Detailed failure message for oneOf schemas: %s. JSON: %s", validCount, errorMessages, jsonElement.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an instance of SimpleOneOf given an JSON string
|
||||||
|
*
|
||||||
|
* @param jsonString JSON string
|
||||||
|
* @return An instance of SimpleOneOf
|
||||||
|
* @throws IOException if the JSON string is invalid with respect to SimpleOneOf
|
||||||
|
*/
|
||||||
|
public static SimpleOneOf fromJson(String jsonString) throws IOException {
|
||||||
|
return JSON.getGson().fromJson(jsonString, SimpleOneOf.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert an instance of SimpleOneOf to an JSON string
|
||||||
|
*
|
||||||
|
* @return JSON string
|
||||||
|
*/
|
||||||
|
public String toJson() {
|
||||||
|
return JSON.getGson().toJson(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -21,6 +21,7 @@ import com.google.gson.annotations.SerializedName;
|
|||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
@ -51,7 +52,9 @@ import org.openapitools.client.JSON;
|
|||||||
* SomeObj
|
* SomeObj
|
||||||
*/
|
*/
|
||||||
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
|
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
|
||||||
public class SomeObj {
|
public class SomeObj implements Serializable {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets or Sets $type
|
* Gets or Sets $type
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* ping some object
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* The version of the OpenAPI document: 1.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
package org.openapitools.client.model;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Disabled;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model tests for SimpleOneOf
|
||||||
|
*/
|
||||||
|
public class SimpleOneOfTest {
|
||||||
|
private final SimpleOneOf model = new SimpleOneOf();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model tests for SimpleOneOf
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testSimpleOneOf() {
|
||||||
|
// TODO: test SimpleOneOf
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user