### Question:
Action implements Sc2ApiSerializable<Sc2Api.Action> { public static Action from(Sc2Api.Action sc2ApiAction) { require("sc2api action", sc2ApiAction); return new Action(sc2ApiAction); } private  Action(Builder builder); private  Action(Sc2Api.Action sc2ApiAction); static ActionSyntax action(); static Action from(Sc2Api.Action sc2ApiAction); @Override Sc2Api.Action toSc2Api(); Optional<ActionRaw> getRaw(); Optional<ActionSpatial> getFeatureLayer(); Optional<ActionSpatial> getRender(); Optional<ActionUi> getUi(); Optional<ActionChat> getChat(); Optional<Integer> getGameLoop(); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test void throwsExceptionWhenSc2ApiActionIsNull() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> Action.from(nothing())) .withMessage("sc2api action is required"); }
@Test void convertsAllFieldsFromSc2ApiAction() { assertThatAllFieldsAreConverted(Action.from(sc2ApiAction())); }