1 /**
2  * \file    TestSBMLDocumentPlugin.cpp
3  * \brief   SBMLDocumentPlugin unit tests
4  * \author  Frank T. Bergmann <fbergman@caltech.edu>
5  *
6  * <!--------------------------------------------------------------------------
7  * This file is part of libSBML.  Please visit http://sbml.org for more
8  * information about SBML, and the latest version of libSBML.
9  *
10  * Copyright (C) 2020 jointly by the following organizations:
11  *     1. California Institute of Technology, Pasadena, CA, USA
12  *     2. University of Heidelberg, Heidelberg, Germany
13  *     3. University College London, London, UK
14  *
15  * Copyright (C) 2019 jointly by the following organizations:
16  *     1. California Institute of Technology, Pasadena, CA, USA
17  *     2. University of Heidelberg, Heidelberg, Germany
18  *
19  * Copyright (C) 2013-2018 jointly by the following organizations:
20  *     1. California Institute of Technology, Pasadena, CA, USA
21  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
22  *     3. University of Heidelberg, Heidelberg, Germany
23  *
24  * Copyright (C) 2009-2013 jointly by the following organizations:
25  *     1. California Institute of Technology, Pasadena, CA, USA
26  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
27  *
28  * Copyright (C) 2006-2008 by the California Institute of Technology,
29  *     Pasadena, CA, USA
30  *
31  * Copyright (C) 2002-2005 jointly by the following organizations:
32  *     1. California Institute of Technology, Pasadena, CA, USA
33  *     2. Japan Science and Technology Agency, Japan
34  *
35  * This library is free software; you can redistribute it and/or modify it
36  * under the terms of the GNU Lesser General Public License as published by
37  * the Free Software Foundation.  A copy of the license agreement is provided
38  * in the file named "LICENSE.txt" included with this software distribution
39  * and also available online as http://sbml.org/software/libsbml/license.html
40  * ---------------------------------------------------------------------- -->*/
41 
42 #if defined(__cplusplus)
43 #include <iostream>
44 #endif
45 
46 #include <check.h>
47 
48 #include <sbml/common/common.h>
49 #include <sbml/common/extern.h>
50 
51 #include <sbml/extension/SBMLExtension.h>
52 #include <sbml/extension/SBMLExtensionRegistry.h>
53 #include <sbml/extension/SBasePluginCreator.h>
54 #include <sbml/extension/SBMLDocumentPlugin.h>
55 #include <sbml/extension/SBaseExtensionPoint.h>
56 
57 #include <sbml/SBMLTypes.h>
58 
59 #include "TestPackage.h"
60 
61 
62 using namespace std;
63 LIBSBML_CPP_NAMESPACE_USE
64 
65 BEGIN_C_DECLS
66 
START_TEST(test_SBMLDocumentPlugin_create)67 START_TEST (test_SBMLDocumentPlugin_create)
68 {
69 	TestPkgNamespaces ns(3, 1, 1);
70 	string uri = TestExtension::getXmlnsL3V1V1();
71 	string prefix = "prefix";
72 	std::vector<std::string> packageURIs;
73 	packageURIs.push_back(uri);
74 
75 	// create a creator for TestModelPlugins
76 	SBaseExtensionPoint sbmldocExtPoint("core",SBML_DOCUMENT);
77 	SBasePluginCreator<SBMLDocumentPlugin, TestExtension> sbmldocPluginCreator(sbmldocExtPoint,packageURIs);
78 
79 	fail_unless(sbmldocPluginCreator.getNumOfSupportedPackageURI() == 1);
80 	fail_unless(strcmp(sbmldocPluginCreator.getSupportedPackageURI(0).c_str(), uri.c_str()) == 0);
81 	fail_unless(strcmp(sbmldocPluginCreator.getSupportedPackageURI(10000).c_str(), "") == 0);
82 	fail_unless(sbmldocPluginCreator.getTargetExtensionPoint().getPackageName() == sbmldocExtPoint.getPackageName());
83 	fail_unless(sbmldocPluginCreator.getTargetExtensionPoint().getTypeCode() == sbmldocExtPoint.getTypeCode());
84 	fail_unless(sbmldocPluginCreator.getTargetPackageName() == sbmldocExtPoint.getPackageName());
85 	fail_unless(sbmldocPluginCreator.getTargetSBMLTypeCode() == sbmldocExtPoint.getTypeCode());
86 	fail_unless(sbmldocPluginCreator.isSupported(uri));
87 
88 	SBMLDocumentPlugin *plugin = sbmldocPluginCreator.createPlugin(uri, prefix, ns.getNamespaces());
89 
90 	fail_unless(plugin != NULL);
91   fail_unless(plugin->isSetRequired() == false);
92 	fail_unless(plugin->getRequired() == true);
93 	plugin->setRequired(false);
94   fail_unless(plugin->isSetRequired() == true);
95 	fail_unless(plugin->getRequired() == false);
96 
97 	delete plugin;
98 
99 
100 }
101 END_TEST
102 
START_TEST(test_SBMLDocumentPlugin_c_api)103 START_TEST (test_SBMLDocumentPlugin_c_api)
104 {
105   TestPkgNamespaces ns(3, 1, 1);
106 	string uri = TestExtension::getXmlnsL3V1V1();
107 	string prefix = "prefix";
108 	std::vector<std::string> packageURIs;
109 	packageURIs.push_back(uri);
110 
111 	// create a creator for TestModelPlugins
112 	SBaseExtensionPoint sbmldocExtPoint("core",SBML_DOCUMENT);
113 	SBasePluginCreator<SBMLDocumentPlugin, TestExtension> sbmldocPluginCreator(sbmldocExtPoint,packageURIs);
114 
115 	fail_unless(sbmldocPluginCreator.getNumOfSupportedPackageURI() == 1);
116 	fail_unless(strcmp(sbmldocPluginCreator.getSupportedPackageURI(0).c_str(), uri.c_str()) == 0);
117 	fail_unless(strcmp(sbmldocPluginCreator.getSupportedPackageURI(10000).c_str(), "") == 0);
118 	fail_unless(sbmldocPluginCreator.getTargetExtensionPoint().getPackageName() == sbmldocExtPoint.getPackageName());
119 	fail_unless(sbmldocPluginCreator.getTargetExtensionPoint().getTypeCode() == sbmldocExtPoint.getTypeCode());
120 	fail_unless(sbmldocPluginCreator.getTargetPackageName() == sbmldocExtPoint.getPackageName());
121 	fail_unless(sbmldocPluginCreator.getTargetSBMLTypeCode() == sbmldocExtPoint.getTypeCode());
122 	fail_unless(sbmldocPluginCreator.isSupported(uri));
123 
124   SBMLDocumentPlugin_t* plugin = SBMLDocumentPlugin_create(uri.c_str(), prefix.c_str(), &ns);
125 	fail_unless(plugin != NULL);
126   fail_unless(SBMLDocumentPlugin_isSetRequired(plugin) == (int)false);
127   fail_unless(SBMLDocumentPlugin_getRequired(plugin) == (int)true);
128   SBMLDocumentPlugin_setRequired(plugin, (int)true);
129   fail_unless(SBMLDocumentPlugin_isSetRequired(plugin) == (int)true);
130   fail_unless(SBMLDocumentPlugin_getRequired(plugin) == (int)true);
131   SBMLDocumentPlugin_setRequired(plugin, (int)false);
132   fail_unless(SBMLDocumentPlugin_isSetRequired(plugin) == (int)true);
133   fail_unless(SBMLDocumentPlugin_getRequired(plugin) == (int)false);
134   SBMLDocumentPlugin_unsetRequired(plugin);
135   fail_unless(SBMLDocumentPlugin_isSetRequired(plugin) == (int)false);
136 
137   fail_unless(SBMLDocumentPlugin_free(plugin) == LIBSBML_OPERATION_SUCCESS);
138 
139   fail_unless(SBMLDocumentPlugin_create(NULL, NULL, NULL) == NULL);
140   fail_unless(SBMLDocumentPlugin_getRequired(NULL) == LIBSBML_INVALID_OBJECT);
141   fail_unless(SBMLDocumentPlugin_setRequired(NULL, 0) == LIBSBML_INVALID_OBJECT);
142 
143 }
144 END_TEST
145 
146 
147 Suite *
create_suite_SBMLDocumentPlugin(void)148 create_suite_SBMLDocumentPlugin (void)
149 {
150   Suite *suite = suite_create("SBMLDocumentPlugin");
151   TCase *tcase = tcase_create("SBMLDocumentPlugin");
152 
153   tcase_add_test( tcase, test_SBMLDocumentPlugin_create );
154   tcase_add_test( tcase, test_SBMLDocumentPlugin_c_api );
155 
156   suite_add_tcase(suite, tcase);
157 
158   return suite;
159 }
160 
161 END_C_DECLS
162 
163