1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.metaschema.databind.model;
7   
8   import com.fasterxml.jackson.core.JsonFactory;
9   import com.fasterxml.jackson.core.JsonParseException;
10  import com.fasterxml.jackson.core.JsonParser;
11  
12  import gov.nist.secauto.metaschema.core.model.IBoundObject;
13  import gov.nist.secauto.metaschema.core.util.ObjectUtils;
14  import gov.nist.secauto.metaschema.databind.DefaultBindingContext;
15  import gov.nist.secauto.metaschema.databind.IBindingContext;
16  import gov.nist.secauto.metaschema.databind.model.test.RootBoundAssembly;
17  
18  import org.jmock.junit5.JUnit5Mockery;
19  import org.junit.jupiter.api.extension.RegisterExtension;
20  
21  import java.io.IOException;
22  import java.io.Reader;
23  
24  import edu.umd.cs.findbugs.annotations.NonNull;
25  
26  public class AbstractBoundModelTestSupport {
27    @RegisterExtension
28    private final JUnit5Mockery context = new JUnit5Mockery();
29  
30    @NonNull
31    private final IBindingContext bindingContext = DefaultBindingContext.instance();
32    //
33    // @BeforeAll
34    // void initContext() {
35    // /**
36    // * Setup bound classes
37    // */
38    // registerMetaschema(TestMetaschema.class);
39    // registerClassBinding(CollapsibleFlaggedBoundField.class);
40    // registerClassBinding(EmptyBoundAssembly.class);
41    // registerClassBinding(FlaggedBoundAssembly.class);
42    // registerClassBinding(FlaggedBoundField.class);
43    // registerClassBinding(OnlyModelBoundAssembly.class);
44    // registerClassBinding(RootBoundAssembly.class);
45    // }
46  
47    @NonNull
48    protected JUnit5Mockery getJUnit5Mockery() {
49      return ObjectUtils.requireNonNull(context);
50    }
51  
52    @NonNull
53    protected IBindingContext getBindingContext() {
54      return bindingContext;
55    }
56  
57    @NonNull
58    protected IBoundDefinitionModelComplex registerClassBinding(@NonNull Class<? extends IBoundObject> clazz) {
59      IBoundDefinitionModelComplex definition = getBindingContext().getBoundDefinitionForClass(clazz);
60      if (definition == null) {
61        throw new IllegalArgumentException(String.format("Unable to find bound definition for class '%s'.",
62            clazz.getName()));
63      }
64      return definition;
65    }
66  
67    @NonNull
68    protected IBoundModule registerModule(@NonNull Class<? extends IBoundModule> clazz) {
69      return getBindingContext().registerModule(clazz);
70    }
71  
72    @NonNull
73    protected IBoundDefinitionModelAssembly getRootAssemblyClassBinding() {
74      return ObjectUtils.requireNonNull((IBoundDefinitionModelAssembly) getBindingContext()
75          .getBoundDefinitionForClass(RootBoundAssembly.class));
76    }
77  
78    @SuppressWarnings("resource")
79    @NonNull
80    protected JsonParser newJsonParser(@NonNull Reader reader) throws JsonParseException, IOException {
81      JsonFactory factory = new JsonFactory();
82      JsonParser jsonParser = factory.createParser(reader); // NOPMD - reader not owned by this method
83      return ObjectUtils.notNull(jsonParser);
84    }
85  }