1212import java .util .ArrayList ;
1313import java .util .LinkedHashSet ;
1414import java .util .List ;
15+ import java .util .Optional ;
1516import java .util .Set ;
1617import java .util .function .BiConsumer ;
1718import java .util .function .Consumer ;
@@ -392,12 +393,9 @@ public void testGetActorId() {
392393 // show that the number of actor ids matches the number of actor aliases
393394 assertEquals (3 , observedActorIds .size ());
394395 }
395-
396-
397-
398-
396+
399397 private void executeGetDataManagerTest (Consumer <ActorContext > consumer ) {
400-
398+
401399 // create the test plugin data builder
402400 TestPluginData .Builder pluginDataBuilder = TestPluginData .builder ();
403401
@@ -408,7 +406,7 @@ private void executeGetDataManagerTest(Consumer<ActorContext> consumer) {
408406 pluginDataBuilder .addTestDataManager ("dm3B" , () -> new TestDataManager3B ());
409407 pluginDataBuilder .addTestDataManager ("dm4A" , () -> new TestDataManager4A ());
410408
411- pluginDataBuilder .addTestActorPlan ("actor" , new TestActorPlan (0 , consumer ));
409+ pluginDataBuilder .addTestActorPlan ("actor" , new TestActorPlan (0 , consumer ));
412410
413411 // build the action plugin
414412 TestPluginData testPluginData = pluginDataBuilder .build ();
@@ -421,34 +419,34 @@ private void executeGetDataManagerTest(Consumer<ActorContext> consumer) {
421419 @ UnitTestMethod (target = ActorContext .class , name = "getDataManager" , args = { Class .class })
422420 public void testGetDataManager () {
423421
424- //postcondition test:
425- executeGetDataManagerTest ((c )-> {
426- assertNotNull (c .getDataManager (TestDataManager1 .class ));
422+ // postcondition test:
423+ executeGetDataManagerTest ((c ) -> {
424+ assertNotNull (c .getDataManager (TestDataManager1 .class ));
427425 assertNotNull (c .getDataManager (TestDataManager3A .class ));
428426 assertNotNull (c .getDataManager (TestDataManager3B .class ));
429427 assertNotNull (c .getDataManager (TestDataManager4A .class ));
430428 assertNotNull (c .getDataManager (TestDataManager4 .class ));
431429 });
432430
433431 // precondition test: if the class reference is null
434- ContractException contractException = assertThrows (ContractException .class , ()-> {
435- executeGetDataManagerTest ((c )-> {
432+ ContractException contractException = assertThrows (ContractException .class , () -> {
433+ executeGetDataManagerTest ((c ) -> {
436434 c .getDataManager (null );
437435 });
438436 });
439437 assertEquals (NucleusError .NULL_DATA_MANAGER_CLASS , contractException .getErrorType ());
440-
438+
441439 // precondition test: if the class reference is null
442- contractException = assertThrows (ContractException .class , ()-> {
443- executeGetDataManagerTest ((c )-> {
440+ contractException = assertThrows (ContractException .class , () -> {
441+ executeGetDataManagerTest ((c ) -> {
444442 c .getDataManager (TestDataManager3 .class );
445443 });
446444 });
447445 assertEquals (NucleusError .AMBIGUOUS_DATA_MANAGER_CLASS , contractException .getErrorType ());
448-
446+
449447 // precondition test: if the class reference is unknown
450- contractException = assertThrows (ContractException .class , ()-> {
451- executeGetDataManagerTest ((c )-> {
448+ contractException = assertThrows (ContractException .class , () -> {
449+ executeGetDataManagerTest ((c ) -> {
452450 c .getDataManager (TestDataManager4B .class );
453451 });
454452 });
@@ -1070,4 +1068,155 @@ private void planRetrievalSimCloseSubscribe(ActorContext context, List<ActorPlan
10701068 assertEquals (expectedPlans .size (), plans .size ());
10711069 assertEquals (expectedPlans , plans );
10721070 }
1071+
1072+ private static class LocalPluginData implements PluginData {
1073+
1074+ public static class Builder implements PluginDataBuilder {
1075+ @ Override
1076+ public LocalPluginData build () {
1077+ return new LocalPluginData ();
1078+ }
1079+ }
1080+
1081+ @ Override
1082+ public PluginDataBuilder toBuilder () {
1083+ return new Builder ();
1084+ }
1085+ }
1086+
1087+ private static class LocalPluginData2 implements PluginData {
1088+
1089+ public static class Builder implements PluginDataBuilder {
1090+ @ Override
1091+ public LocalPluginData2 build () {
1092+ return new LocalPluginData2 ();
1093+ }
1094+ }
1095+
1096+ @ Override
1097+ public PluginDataBuilder toBuilder () {
1098+ return new Builder ();
1099+ }
1100+ }
1101+
1102+ @ Test
1103+ @ UnitTestMethod (target = ActorContext .class , name = "getPluginData" , args = { Class .class })
1104+ public void testGetPluginData () {
1105+
1106+ TestPluginData .Builder pluginDataBuilder = TestPluginData .builder ();
1107+
1108+ pluginDataBuilder .addTestActorPlan ("actor" , new TestActorPlan (0 , (c ) -> {
1109+ Optional <LocalPluginData > optional1 = c .getPluginData (LocalPluginData .class );
1110+ assertTrue (optional1 .isPresent ());
1111+ Optional <LocalPluginData2 > optional2 = c .getPluginData (LocalPluginData2 .class );
1112+ assertFalse (optional2 .isPresent ());
1113+
1114+ }));
1115+
1116+ // build the plugin
1117+ TestPluginData testPluginData = pluginDataBuilder .build ();
1118+ Plugin testPlugin = TestPlugin .getTestPlugin (testPluginData );
1119+
1120+ Plugin localPlugin = Plugin .builder ()//
1121+ .setPluginId (new SimplePluginId ("localPlugin" ))//
1122+ .addPluginData (new LocalPluginData ())//
1123+ .build ();
1124+
1125+ // run the simulation
1126+ Simulation .builder ()//
1127+ .addPlugin (testPlugin )//
1128+ .addPlugin (localPlugin )//
1129+ .build ()//
1130+ .execute ();//
1131+
1132+ // precondition test: if more than one plugin data object matches the class
1133+ // reference
1134+ ContractException contractException = assertThrows (ContractException .class , () -> {
1135+ Plugin lp = Plugin .builder ()//
1136+ .setPluginId (new SimplePluginId ("localPlugin" ))//
1137+ .addPluginData (new LocalPluginData ())//
1138+ .addPluginData (new LocalPluginData ())//
1139+ .build ();
1140+
1141+ Simulation .builder ()//
1142+ .addPlugin (lp )//
1143+ .addPlugin (TestPlugin .getTestPlugin (
1144+ TestPluginData .builder ().addTestActorPlan ("actor" , new TestActorPlan (0 , (c ) -> {
1145+ c .getPluginData (LocalPluginData .class );
1146+ })).build ()))//
1147+ .build ()//
1148+ .execute ();//
1149+ });
1150+ assertEquals (NucleusError .AMBIGUOUS_PLUGIN_DATA_CLASS , contractException .getErrorType ());
1151+
1152+ // precondition test: if the class reference is null
1153+ contractException = assertThrows (ContractException .class , () -> {
1154+ Simulation .builder ()//
1155+ .addPlugin (TestPlugin .getTestPlugin (
1156+ TestPluginData .builder ().addTestActorPlan ("actor" , new TestActorPlan (0 , (c ) -> {
1157+ c .getPluginData (null );
1158+ })).build ()))//
1159+ .build ()//
1160+ .execute ();//
1161+ });
1162+ assertEquals (NucleusError .NULL_PLUGIN_DATA_CLASS , contractException .getErrorType ());
1163+
1164+ }
1165+
1166+ @ Test
1167+ @ UnitTestMethod (target = ActorContext .class , name = "getPluginDatas" , args = { Class .class })
1168+ public void testGetPluginDatas () {
1169+ /*
1170+ * Returns the plugin data objects associated with the given class reference
1171+ *
1172+ * @throws ContractException {@linkplain NucleusError#NULL_PLUGIN_DATA_CLASS} if
1173+ * the class reference is null
1174+ */
1175+ TestPluginData .Builder pluginDataBuilder = TestPluginData .builder ();
1176+
1177+ pluginDataBuilder .addTestActorPlan ("actor" , new TestActorPlan (0 , (c ) -> {
1178+ List <LocalPluginData > localPluginDatas = c .getPluginDatas (LocalPluginData .class );
1179+ assertNotNull (localPluginDatas );
1180+ assertEquals (2 ,localPluginDatas .size ());
1181+
1182+ List <LocalPluginData2 > localPluginData2s = c .getPluginDatas (LocalPluginData2 .class );
1183+ assertNotNull (localPluginData2s );
1184+ assertEquals (0 ,localPluginData2s .size ());
1185+
1186+ List <PluginData > pluginDatas = c .getPluginDatas (PluginData .class );
1187+ assertNotNull (pluginDatas );
1188+ assertEquals (3 ,pluginDatas .size ());
1189+
1190+ }));
1191+
1192+ // build the plugin
1193+ TestPluginData testPluginData = pluginDataBuilder .build ();
1194+ Plugin testPlugin = TestPlugin .getTestPlugin (testPluginData );
1195+
1196+ Plugin localPlugin = Plugin .builder ()//
1197+ .setPluginId (new SimplePluginId ("localPlugin" ))//
1198+ .addPluginData (new LocalPluginData ())//
1199+ .addPluginData (new LocalPluginData ())//
1200+ .build ();
1201+
1202+ // run the simulation
1203+ Simulation .builder ()//
1204+ .addPlugin (testPlugin )//
1205+ .addPlugin (localPlugin )//
1206+ .build ()//
1207+ .execute ();//
1208+
1209+ // precondition test: if the class reference is null
1210+ ContractException contractException = assertThrows (ContractException .class , () -> {
1211+ Simulation .builder ()//
1212+ .addPlugin (TestPlugin .getTestPlugin (
1213+ TestPluginData .builder ().addTestActorPlan ("actor" , new TestActorPlan (0 , (c ) -> {
1214+ c .getPluginDatas (null );
1215+ })).build ()))//
1216+ .build ()//
1217+ .execute ();//
1218+ });
1219+ assertEquals (NucleusError .NULL_PLUGIN_DATA_CLASS , contractException .getErrorType ());
1220+
1221+ }
10731222}
0 commit comments