### Question:
StartRaw implements Serializable { public static StartRaw from(Raw.StartRaw sc2ApiStartRaw) { require("sc2api start raw", sc2ApiStartRaw); return new StartRaw(sc2ApiStartRaw); } private  StartRaw(Raw.StartRaw sc2ApiStartRaw); static StartRaw from(Raw.StartRaw sc2ApiStartRaw); Size2dI getMapSize(); ImageData getPathingGrid(); ImageData getTerrainHeight(); ImageData getPlacementGrid(); RectangleI getPlayableArea(); Set<Point2d> getStartLocations(); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test void throwsExceptionWhenSc2ApiStartRawIsNull() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> StartRaw.from(nothing())) .withMessage("sc2api start raw is required"); }
@Test void convertsAllFieldsFromSc2ApiStartRaw() { assertThatAllFieldsAreConverted(StartRaw.from(sc2ApiStartRaw())); }
@Test void throwsExceptionWhenMapSizeIsNotProvided() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> StartRaw.from( without(() -> sc2ApiStartRaw().toBuilder(), Raw.StartRaw.Builder::clearMapSize).build())) .withMessage("map size is required"); }
@Test void throwsExceptionWhenPathingGridIsNotProvided() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> StartRaw.from( without(() -> sc2ApiStartRaw().toBuilder(), Raw.StartRaw.Builder::clearPathingGrid).build())) .withMessage("pathing grid is required"); }
@Test void throwsExceptionWhenTerrainHeightIsNotProvided() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> StartRaw.from( without(() -> sc2ApiStartRaw().toBuilder(), Raw.StartRaw.Builder::clearTerrainHeight).build())) .withMessage("terrain height is required"); }
@Test void throwsExceptionWhenPlacementGridIsNotProvided() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> StartRaw.from( without(() -> sc2ApiStartRaw().toBuilder(), Raw.StartRaw.Builder::clearPlacementGrid).build())) .withMessage("placement grid is required"); }
@Test void throwsExceptionWhenPlayableAreaIsNotProvided() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> StartRaw.from( without(() -> sc2ApiStartRaw().toBuilder(), Raw.StartRaw.Builder::clearPlayableArea).build())) .withMessage("playable area is required"); }