### Question:
EffectLocations implements Serializable { public static EffectLocations from(Raw.Effect sc2ApiEffect) { require("sc2api effect", sc2ApiEffect); return new EffectLocations(sc2ApiEffect); } private  EffectLocations(Raw.Effect sc2ApiEffect); static EffectLocations from(Raw.Effect sc2ApiEffect); Effect getEffect(); Set<Point2d> getPositions(); Optional<Alliance> getAlliance(); Optional<Integer> getOwner(); Optional<Float> getRadius(); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test void throwsExceptionWhenSc2ApiEffectIsNull() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> EffectLocations.from(nothing())) .withMessage("sc2api effect is required"); }
@Test void convertsAllFieldsFromSc2ApiEffect() { assertThatAllFieldsAreConverted(EffectLocations.from(sc2ApiEffect())); }
@Test void throwsExceptionWhenEffectIdIsNotProvided() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> EffectLocations.from(without( () -> sc2ApiEffect().toBuilder(), Raw.Effect.Builder::clearEffectId).build())) .withMessage("effect is required"); }