### Question:
ActionUiControlGroup implements Sc2ApiSerializable<Ui.ActionControlGroup> { public static ActionUiControlGroup from(Ui.ActionControlGroup sc2ApiActionControlGroup) { require("sc2api action ui control group", sc2ApiActionControlGroup); return new ActionUiControlGroup(sc2ApiActionControlGroup); } private  ActionUiControlGroup(Builder builder); private  ActionUiControlGroup(Ui.ActionControlGroup sc2ApiActionControlGroup); static ActionUiControlGroupSyntax controlGroup(); static ActionUiControlGroup from(Ui.ActionControlGroup sc2ApiActionControlGroup); @Override Ui.ActionControlGroup toSc2Api(); Action getAction(); int getIndex(); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test void throwsExceptionWhenSc2ApiActionUiControlGroupIsNull() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> ActionUiControlGroup.from(nothing())) .withMessage("sc2api action ui control group is required"); }
@Test void convertsSc2ApiActionUiControlGroupToActionUiControlGroup() { assertThatAllFieldsAreConverted(ActionUiControlGroup.from(sc2ApiActionUiControlGroup())); }
@Test void throwsExceptionWhenControlGroupActionIsNotProvided() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> ActionUiControlGroup.Action.from(nothing())) .withMessage("sc2api control group action is required"); }