diff --git a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessConnection.java b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessConnection.java index 94fe9e11..4c7a4009 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessConnection.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessConnection.java @@ -40,18 +40,25 @@ public Boolean isEnabled() { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof BusinessConnection)) return false; + if (o == null || getClass() != o.getClass()) return false; BusinessConnection that = (BusinessConnection) o; - return Objects.equals(id, that.id) - && Objects.equals(user, that.user) - && Objects.equals(user_chat_id, that.user_chat_id) - && Objects.equals(date, that.date) - && Objects.equals(can_reply, that.can_reply) - && Objects.equals(is_enabled, that.is_enabled); + return Objects.equals(id, that.id) && Objects.equals(user, that.user) && Objects.equals(user_chat_id, that.user_chat_id) && Objects.equals(date, that.date) && Objects.equals(can_reply, that.can_reply) && Objects.equals(is_enabled, that.is_enabled); } @Override public int hashCode() { - return id != null ? id.hashCode() : 0; + return Objects.hash(id, user, user_chat_id, date, can_reply, is_enabled); + } + + @Override + public String toString() { + return "BusinessConnection{" + + "id='" + id + '\'' + + ", user=" + user + + ", user_chat_id=" + user_chat_id + + ", date=" + date + + ", can_reply=" + can_reply + + ", is_enabled=" + is_enabled + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessIntro.java b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessIntro.java index 196e621c..cb8d24b1 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessIntro.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessIntro.java @@ -25,11 +25,9 @@ public Sticker sticker() { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof BusinessIntro)) return false; + if (o == null || getClass() != o.getClass()) return false; BusinessIntro that = (BusinessIntro) o; - return Objects.equals(title, that.title) - && Objects.equals(message, that.message) - && Objects.equals(sticker, that.sticker); + return Objects.equals(title, that.title) && Objects.equals(message, that.message) && Objects.equals(sticker, that.sticker); } @Override @@ -40,9 +38,9 @@ public int hashCode() { @Override public String toString() { return "BusinessIntro{" + - "title='" + title + '\'' + - ", message='" + message + '\'' + - ", sticker=" + sticker + - '}'; + "title='" + title + '\'' + + ", message='" + message + '\'' + + ", sticker=" + sticker + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessLocation.java b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessLocation.java index 5d85b4cf..ee67f88e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessLocation.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessLocation.java @@ -20,7 +20,7 @@ public Location location() { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof BusinessLocation)) return false; + if (o == null || getClass() != o.getClass()) return false; BusinessLocation that = (BusinessLocation) o; return Objects.equals(address, that.address) && Objects.equals(location, that.location); } @@ -33,8 +33,8 @@ public int hashCode() { @Override public String toString() { return "BusinessLocation{" + - "address='" + address + '\'' + - ", location=" + location + - '}'; + "address='" + address + '\'' + + ", location=" + location + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessMessageDeleted.java b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessMessageDeleted.java index e80f0a0f..06959ce1 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessMessageDeleted.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessMessageDeleted.java @@ -26,26 +26,22 @@ public Integer[] messageIds() { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof BusinessMessageDeleted)) return false; + if (o == null || getClass() != o.getClass()) return false; BusinessMessageDeleted that = (BusinessMessageDeleted) o; - return Objects.equals(business_connection_id, that.business_connection_id) - && Objects.equals(chat, that.chat) - && Arrays.equals(message_ids, that.message_ids); + return Objects.equals(business_connection_id, that.business_connection_id) && Objects.equals(chat, that.chat) && Objects.deepEquals(message_ids, that.message_ids); } @Override public int hashCode() { - int result = Objects.hash(business_connection_id, chat); - result = 31 * result + Arrays.hashCode(message_ids); - return result; + return Objects.hash(business_connection_id, chat, Arrays.hashCode(message_ids)); } @Override public String toString() { return "BusinessMessageDeleted{" + - "business_connection_id='" + business_connection_id + '\'' + - ", chat=" + chat + - ", message_ids=" + Arrays.toString(message_ids) + - '}'; + "business_connection_id='" + business_connection_id + '\'' + + ", chat=" + chat + + ", message_ids=" + Arrays.toString(message_ids) + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessOpeningHours.java b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessOpeningHours.java index b0761ac0..91a9acad 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessOpeningHours.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessOpeningHours.java @@ -19,23 +19,21 @@ public BusinessOpeningHoursInterval[] openingHours() { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof BusinessOpeningHours)) return false; + if (o == null || getClass() != o.getClass()) return false; BusinessOpeningHours that = (BusinessOpeningHours) o; - return Objects.equals(time_zone_name, that.time_zone_name) && Arrays.equals(opening_hours, that.opening_hours); + return Objects.equals(time_zone_name, that.time_zone_name) && Objects.deepEquals(opening_hours, that.opening_hours); } @Override public int hashCode() { - int result = Objects.hash(time_zone_name); - result = 31 * result + Arrays.hashCode(opening_hours); - return result; + return Objects.hash(time_zone_name, Arrays.hashCode(opening_hours)); } @Override public String toString() { return "BusinessOpeningHours{" + - "time_zone_name='" + time_zone_name + '\'' + - ", opening_hours=" + Arrays.toString(opening_hours) + - '}'; + "time_zone_name='" + time_zone_name + '\'' + + ", opening_hours=" + Arrays.toString(opening_hours) + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessOpeningHoursInterval.java b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessOpeningHoursInterval.java index 105061a3..cf94b9cb 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessOpeningHoursInterval.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/business/BusinessOpeningHoursInterval.java @@ -18,10 +18,9 @@ public Integer closing_minute() { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof BusinessOpeningHoursInterval)) return false; + if (o == null || getClass() != o.getClass()) return false; BusinessOpeningHoursInterval that = (BusinessOpeningHoursInterval) o; - return Objects.equals(opening_minute, that.opening_minute) - && Objects.equals(closing_minute, that.closing_minute); + return Objects.equals(opening_minute, that.opening_minute) && Objects.equals(closing_minute, that.closing_minute); } @Override @@ -32,8 +31,8 @@ public int hashCode() { @Override public String toString() { return "BusinessOpeningHoursInterval{" + - "opening_minute=" + opening_minute + - ", closing_minute=" + closing_minute + - '}'; + "opening_minute=" + opening_minute + + ", closing_minute=" + closing_minute + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillFreeformGradient.java b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillFreeformGradient.java index a13ca915..442a9fb1 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillFreeformGradient.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillFreeformGradient.java @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.model.chatbackground; import java.util.Arrays; +import java.util.Objects; public class BackgroundFillFreeformGradient extends BackgroundFill { @@ -21,20 +22,20 @@ public Integer[] colors() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; BackgroundFillFreeformGradient that = (BackgroundFillFreeformGradient) o; - return Arrays.equals(colors, that.colors); + return Objects.deepEquals(colors, that.colors); } @Override public int hashCode() { - return Arrays.hashCode(colors); + return Objects.hash(super.hashCode(), Arrays.hashCode(colors)); } @Override public String toString() { return "BackgroundFillFreeformGradient{" + - "type='" + type() + '\'' + - ", colors=" + Arrays.asList(colors) + - '}'; + "colors=" + Arrays.toString(colors) + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillGradient.java b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillGradient.java index 6f79e8d6..d9d37049 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillGradient.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillGradient.java @@ -33,22 +33,23 @@ public Integer rotationAngle() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; BackgroundFillGradient that = (BackgroundFillGradient) o; return Objects.equals(top_color, that.top_color) && Objects.equals(bottom_color, that.bottom_color) && Objects.equals(rotation_angle, that.rotation_angle); } @Override public int hashCode() { - return Objects.hash(top_color, bottom_color, rotation_angle); + return Objects.hash(super.hashCode(), top_color, bottom_color, rotation_angle); } @Override public String toString() { return "BackgroundFillGradient{" + - "type='" + type() + '\'' + - ", top_color=" + top_color + - ", bottom_color=" + bottom_color + - ", rotation_angle=" + rotation_angle + - '}'; + "type='" + type() + '\'' + + ", top_color=" + top_color + + ", bottom_color=" + bottom_color + + ", rotation_angle=" + rotation_angle + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillSolid.java b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillSolid.java index 7d9de04d..0268cd28 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillSolid.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundFillSolid.java @@ -21,20 +21,21 @@ public Integer color() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; BackgroundFillSolid that = (BackgroundFillSolid) o; return Objects.equals(color, that.color); } @Override public int hashCode() { - return Objects.hash(color); + return Objects.hash(super.hashCode(), color); } @Override public String toString() { return "BackgroundFillSolid{" + - "type='" + type() + '\'' + - ", color=" + color + - '}'; + "type='" + type() + '\'' + + ", color=" + color + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeChatTheme.java b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeChatTheme.java index 8d93e44f..3d8bd47c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeChatTheme.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeChatTheme.java @@ -21,20 +21,21 @@ public String themeName() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; BackgroundTypeChatTheme that = (BackgroundTypeChatTheme) o; return Objects.equals(theme_name, that.theme_name); } @Override public int hashCode() { - return Objects.hash(theme_name); + return Objects.hash(super.hashCode(), theme_name); } @Override public String toString() { return "BackgroundTypeChatTheme{" + - "type='" + type() + '\'' + - ", theme_name=" + theme_name + - '}'; + "type='" + type() + '\'' + + ", theme_name=" + theme_name + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeFill.java b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeFill.java index 445701a9..f84e3154 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeFill.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeFill.java @@ -27,22 +27,22 @@ public Integer darkThemeDimming() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; BackgroundTypeFill that = (BackgroundTypeFill) o; - return Objects.equals(fill, that.fill) && - Objects.equals(dark_theme_dimming, that.dark_theme_dimming); + return Objects.equals(fill, that.fill) && Objects.equals(dark_theme_dimming, that.dark_theme_dimming); } @Override public int hashCode() { - return Objects.hash(fill, dark_theme_dimming); + return Objects.hash(super.hashCode(), fill, dark_theme_dimming); } @Override public String toString() { return "BackgroundTypeFill{" + - "type='" + type() + '\'' + - ", fill='" + fill + '\'' + - ", dark_theme_dimming=" + dark_theme_dimming + - '}'; + "type='" + type() + '\'' + + ", fill='" + fill + '\'' + + ", dark_theme_dimming=" + dark_theme_dimming + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypePattern.java b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypePattern.java index 9f58506a..c8e56289 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypePattern.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypePattern.java @@ -55,28 +55,24 @@ public BackgroundTypePattern isMoving(Boolean isMoving) { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; BackgroundTypePattern that = (BackgroundTypePattern) o; - return Objects.equals(document, that.document) && - Objects.equals(fill, that.fill) && - Objects.equals(intensity, that.intensity) && - Objects.equals(is_inverted, that.is_inverted) && - Objects.equals(is_moving, that.is_moving); + return Objects.equals(document, that.document) && Objects.equals(fill, that.fill) && Objects.equals(intensity, that.intensity) && Objects.equals(is_inverted, that.is_inverted) && Objects.equals(is_moving, that.is_moving); } @Override public int hashCode() { - return Objects.hash(document, fill, intensity, is_inverted, is_moving); + return Objects.hash(super.hashCode(), document, fill, intensity, is_inverted, is_moving); } @Override public String toString() { return "BackgroundTypePattern{" + - "type='" + type() + '\'' + - ", document='" + document + '\'' + - ", fill=" + fill + - ", intensity=" + intensity + - ", is_inverted=" + is_inverted + - ", is_moving=" + is_moving + - '}'; + "document=" + document + + ", fill=" + fill + + ", intensity=" + intensity + + ", is_inverted=" + is_inverted + + ", is_moving=" + is_moving + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeWallpaper.java b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeWallpaper.java index d6dc22b6..2b2b2f8d 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeWallpaper.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatbackground/BackgroundTypeWallpaper.java @@ -49,26 +49,24 @@ public BackgroundTypeWallpaper isMoving(Boolean isMoving) { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; BackgroundTypeWallpaper that = (BackgroundTypeWallpaper) o; - return Objects.equals(document, that.document) && - Objects.equals(dark_theme_dimming, that.dark_theme_dimming) && - Objects.equals(is_blurred, that.is_blurred) && - Objects.equals(is_moving, that.is_moving); + return Objects.equals(document, that.document) && Objects.equals(dark_theme_dimming, that.dark_theme_dimming) && Objects.equals(is_blurred, that.is_blurred) && Objects.equals(is_moving, that.is_moving); } @Override public int hashCode() { - return Objects.hash(document, dark_theme_dimming, is_blurred, is_moving); + return Objects.hash(super.hashCode(), document, dark_theme_dimming, is_blurred, is_moving); } @Override public String toString() { return "BackgroundTypeWallpaper{" + - "type='" + type() + '\'' + - ", document='" + document + '\'' + - ", dark_theme_dimming=" + dark_theme_dimming + - ", is_blurred=" + is_blurred + - ", is_moving=" + is_moving + - '}'; + "type='" + type() + '\'' + + ", document='" + document + '\'' + + ", dark_theme_dimming=" + dark_theme_dimming + + ", is_blurred=" + is_blurred + + ", is_moving=" + is_moving + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatboost/source/ChatBoostSourceGiveaway.java b/library/src/main/java/com/pengrad/telegrambot/model/chatboost/source/ChatBoostSourceGiveaway.java index 4679d7c3..4e1b52a6 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatboost/source/ChatBoostSourceGiveaway.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatboost/source/ChatBoostSourceGiveaway.java @@ -15,13 +15,23 @@ public class ChatBoostSourceGiveaway extends ChatBoostSource implements Serializ public Integer giveawayMessageId() { return giveaway_message_id; } + public Boolean isUnclaimed() { return is_unclaimed != null && is_unclaimed; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + ChatBoostSourceGiveaway that = (ChatBoostSourceGiveaway) o; + return Objects.equals(giveaway_message_id, that.giveaway_message_id) && Objects.equals(is_unclaimed, that.is_unclaimed); + } + @Override public int hashCode() { - return Objects.hash(source, user, giveaway_message_id, is_unclaimed); + return Objects.hash(super.hashCode(), giveaway_message_id, is_unclaimed); } @Override diff --git a/library/src/main/java/com/pengrad/telegrambot/model/giveaway/Giveaway.java b/library/src/main/java/com/pengrad/telegrambot/model/giveaway/Giveaway.java index 7809bfee..b27f9d87 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/giveaway/Giveaway.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/giveaway/Giveaway.java @@ -4,6 +4,7 @@ import com.pengrad.telegrambot.model.LinkPreviewOptions; import java.io.Serializable; +import java.util.Arrays; import java.util.Objects; public class Giveaway implements Serializable { @@ -49,35 +50,26 @@ public Integer premiumSubscriptionMonthCount() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - Giveaway that = (Giveaway) o; - return Objects.equals(chats, that.chats) - && Objects.equals(winners_selection_date, that.winners_selection_date) - && Objects.equals(winner_count, that.winner_count) - && Objects.equals(only_new_members, that.only_new_members) - && Objects.equals(has_public_winners, that.has_public_winners) - && Objects.equals(prize_description, that.prize_description) - && Objects.equals(country_codes, that.country_codes) - && Objects.equals(premium_subscription_month_count, that.premium_subscription_month_count); + Giveaway giveaway = (Giveaway) o; + return Objects.deepEquals(chats, giveaway.chats) && Objects.equals(winners_selection_date, giveaway.winners_selection_date) && Objects.equals(winner_count, giveaway.winner_count) && Objects.equals(only_new_members, giveaway.only_new_members) && Objects.equals(has_public_winners, giveaway.has_public_winners) && Objects.equals(prize_description, giveaway.prize_description) && Objects.deepEquals(country_codes, giveaway.country_codes) && Objects.equals(premium_subscription_month_count, giveaway.premium_subscription_month_count); } @Override public int hashCode() { - return Objects.hash(chats, winners_selection_date, winner_count, only_new_members, has_public_winners, prize_description, country_codes, premium_subscription_month_count); + return Objects.hash(Arrays.hashCode(chats), winners_selection_date, winner_count, only_new_members, has_public_winners, prize_description, Arrays.hashCode(country_codes), premium_subscription_month_count); } @Override public String toString() { return "Giveaway{" + - "chats='" + chats + "'," + - "winners_selection_date='" + winners_selection_date + "'," + - "winner_count='" + winner_count + "'," + - "only_new_members='" + only_new_members + "'," + - "has_public_winners='" + has_public_winners + "'," + - "prize_description='" + prize_description + "'," + - "country_codes='" + country_codes + "'," + - "premium_subscription_month_count='" + premium_subscription_month_count + "'" + + "chats=" + Arrays.toString(chats) + + ", winners_selection_date=" + winners_selection_date + + ", winner_count=" + winner_count + + ", only_new_members=" + only_new_members + + ", has_public_winners=" + has_public_winners + + ", prize_description='" + prize_description + '\'' + + ", country_codes=" + Arrays.toString(country_codes) + + ", premium_subscription_month_count=" + premium_subscription_month_count + '}'; } - - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/giveaway/GiveawayWinners.java b/library/src/main/java/com/pengrad/telegrambot/model/giveaway/GiveawayWinners.java index f81b49bc..9b27b1d2 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/giveaway/GiveawayWinners.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/giveaway/GiveawayWinners.java @@ -4,6 +4,7 @@ import com.pengrad.telegrambot.model.User; import java.io.Serializable; +import java.util.Arrays; import java.util.Objects; public class GiveawayWinners implements Serializable { @@ -26,33 +27,43 @@ public class GiveawayWinners implements Serializable { public Chat chat() { return chat; } + public Integer giveawayMessageId() { return giveaway_message_id; } + public Integer winnersSelectionDate() { return winners_selection_date; } + public Integer winnerCount() { return winner_count; } + public User[] winners() { return winners; } + public Integer additionalChatCount() { return additional_chat_count; } + public Integer premiumSubscriptionMonthCount() { return premium_subscription_month_count; } + public Integer unclaimedPrizeCount() { return unclaimed_prize_count; } + public Boolean onlyNewMembers() { return only_new_members; } + public Boolean wasRefunded() { return was_refunded; } + public String prizeDescription() { return prize_description; } @@ -62,38 +73,28 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; GiveawayWinners that = (GiveawayWinners) o; - return Objects.equals(chat, that.chat) - && Objects.equals(winners_selection_date, that.winners_selection_date) - && Objects.equals(winner_count, that.winner_count) - && Objects.equals(winners, that.winners) - && Objects.equals(additional_chat_count, that.additional_chat_count) - && Objects.equals(premium_subscription_month_count, that.premium_subscription_month_count) - && Objects.equals(unclaimed_prize_count, that.unclaimed_prize_count) - && Objects.equals(only_new_members, that.only_new_members) - && Objects.equals(was_refunded, that.was_refunded) - && Objects.equals(prize_description, that.prize_description); + return Objects.equals(chat, that.chat) && Objects.equals(giveaway_message_id, that.giveaway_message_id) && Objects.equals(winners_selection_date, that.winners_selection_date) && Objects.equals(winner_count, that.winner_count) && Objects.deepEquals(winners, that.winners) && Objects.equals(additional_chat_count, that.additional_chat_count) && Objects.equals(premium_subscription_month_count, that.premium_subscription_month_count) && Objects.equals(unclaimed_prize_count, that.unclaimed_prize_count) && Objects.equals(only_new_members, that.only_new_members) && Objects.equals(was_refunded, that.was_refunded) && Objects.equals(prize_description, that.prize_description); } @Override public int hashCode() { - return Objects.hash(chat, winners_selection_date, winner_count, winners, additional_chat_count, premium_subscription_month_count, unclaimed_prize_count, only_new_members, was_refunded, prize_description); + return Objects.hash(chat, giveaway_message_id, winners_selection_date, winner_count, Arrays.hashCode(winners), additional_chat_count, premium_subscription_month_count, unclaimed_prize_count, only_new_members, was_refunded, prize_description); } @Override public String toString() { return "GiveawayWinners{" + - "chat='" + chat + "'," + - "winners_selection_date='" + winners_selection_date + "'," + - "winner_count='" + winner_count + "'," + - "winners='" + winners + "'," + - "additional_chat_count='" + additional_chat_count + "'," + - "premium_subscription_month_count='" + premium_subscription_month_count + "'," + - "unclaimed_prize_count='" + unclaimed_prize_count + "'," + - "only_new_members='" + only_new_members + "'," + - "was_refunded='" + was_refunded + "'," + - "prize_description='" + prize_description + "'" + + "chat=" + chat + + ", giveaway_message_id=" + giveaway_message_id + + ", winners_selection_date=" + winners_selection_date + + ", winner_count=" + winner_count + + ", winners=" + Arrays.toString(winners) + + ", additional_chat_count=" + additional_chat_count + + ", premium_subscription_month_count=" + premium_subscription_month_count + + ", unclaimed_prize_count=" + unclaimed_prize_count + + ", only_new_members=" + only_new_members + + ", was_refunded=" + was_refunded + + ", prize_description='" + prize_description + '\'' + '}'; } - - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaInfo.java b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaInfo.java index 26024d6f..5fae594c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaInfo.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaInfo.java @@ -24,15 +24,13 @@ public PaidMedia[] paidMedia() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - PaidMediaInfo that = (PaidMediaInfo) o; - return Objects.equals(star_count, that.star_count) && - Arrays.equals(paid_media, that.paid_media); + return Objects.equals(star_count, that.star_count) && Objects.deepEquals(paid_media, that.paid_media); } @Override public int hashCode() { - return Objects.hash(star_count, paid_media); + return Objects.hash(star_count, Arrays.hashCode(paid_media)); } @Override diff --git a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPhoto.java b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPhoto.java index faa045f9..08f948b8 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPhoto.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPhoto.java @@ -23,14 +23,14 @@ public PhotoSize[] getPhoto() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; PaidMediaPhoto that = (PaidMediaPhoto) o; - return Objects.equals(type(), that.type()) && - Arrays.equals(photo, that.photo); + return Objects.deepEquals(photo, that.photo); } @Override public int hashCode() { - return Objects.hash(type(), photo); + return Objects.hash(super.hashCode(), Arrays.hashCode(photo)); } @Override diff --git a/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypeCustomEmoji.java b/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypeCustomEmoji.java index 9c8f5c58..5ebbb287 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypeCustomEmoji.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypeCustomEmoji.java @@ -25,20 +25,21 @@ public void customEmojiId(String customEmojiId) { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; ReactionTypeCustomEmoji that = (ReactionTypeCustomEmoji) o; return Objects.equals(custom_emoji_id, that.custom_emoji_id); } @Override public int hashCode() { - return Objects.hash(custom_emoji_id); + return Objects.hash(super.hashCode(), custom_emoji_id); } @Override public String toString() { return "ReactionTypeCustomEmoji{" + - "type='" + type() + '\'' + - ",custom_emoji_id='" + custom_emoji_id + '\'' + - '}'; + "type='" + type() + '\'' + + ",custom_emoji_id='" + custom_emoji_id + '\'' + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypeEmoji.java b/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypeEmoji.java index 663f6e25..83b0c59f 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypeEmoji.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypeEmoji.java @@ -25,20 +25,21 @@ public void emoji(String emoji) { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; ReactionTypeEmoji that = (ReactionTypeEmoji) o; return Objects.equals(emoji, that.emoji); } @Override public int hashCode() { - return Objects.hash(emoji); + return Objects.hash(super.hashCode(), emoji); } @Override public String toString() { return "ReactionTypeEmoji{" + - "type='" + type() + '\'' + - ",emoji='" + emoji + '\'' + - '}'; + "type='" + type() + '\'' + + ",emoji='" + emoji + '\'' + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypePaid.java b/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypePaid.java index d364ac83..1a30ae9a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypePaid.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/reaction/ReactionTypePaid.java @@ -1,7 +1,5 @@ package com.pengrad.telegrambot.model.reaction; -import java.util.Objects; - public class ReactionTypePaid extends ReactionType { public static final String PAID_TYPE = "paid"; @@ -10,18 +8,10 @@ public ReactionTypePaid() { super(PAID_TYPE); } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - return true; - } - @Override public String toString() { return "ReactionTypePaid{" + - "type='" + type() + '\'' + - '}'; + "type='" + type() + '\'' + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/shared/SharedUser.java b/library/src/main/java/com/pengrad/telegrambot/model/shared/SharedUser.java index 268159f0..eca4be75 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/shared/SharedUser.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/shared/SharedUser.java @@ -39,26 +39,24 @@ public PhotoSize[] photo() { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof SharedUser)) return false; + if (o == null || getClass() != o.getClass()) return false; SharedUser that = (SharedUser) o; - return Objects.equals(user_id, that.user_id) && Objects.equals(first_name, that.first_name) && Objects.equals(last_name, that.last_name) && Objects.equals(username, that.username) && Arrays.equals(photo, that.photo); + return Objects.equals(user_id, that.user_id) && Objects.equals(first_name, that.first_name) && Objects.equals(last_name, that.last_name) && Objects.equals(username, that.username) && Objects.deepEquals(photo, that.photo); } @Override public int hashCode() { - int result = Objects.hash(user_id, first_name, last_name, username); - result = 31 * result + Arrays.hashCode(photo); - return result; + return Objects.hash(user_id, first_name, last_name, username, Arrays.hashCode(photo)); } @Override public String toString() { return "SharedUser{" + - "user_id=" + user_id + - ", first_name='" + first_name + '\'' + - ", last_name='" + last_name + '\'' + - ", username='" + username + '\'' + - ", photo=" + Arrays.toString(photo) + - '}'; + "user_id=" + user_id + + ", first_name='" + first_name + '\'' + + ", last_name='" + last_name + '\'' + + ", username='" + username + '\'' + + ", photo=" + Arrays.toString(photo) + + '}'; } } diff --git a/library/src/test/java/com/pengrad/telegrambot/ModelTest.java b/library/src/test/java/com/pengrad/telegrambot/ModelTest.java deleted file mode 100644 index 13735d50..00000000 --- a/library/src/test/java/com/pengrad/telegrambot/ModelTest.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.pengrad.telegrambot; - -import com.pengrad.telegrambot.model.*; -import com.pengrad.telegrambot.model.Message; -import com.pengrad.telegrambot.model.message.MaybeInaccessibleMessage; -import com.pengrad.telegrambot.model.request.InlineKeyboardButton; -import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup; -import com.pengrad.telegrambot.passport.Credentials; -import nl.jqno.equalsverifier.EqualsVerifier; -import nl.jqno.equalsverifier.EqualsVerifierApi; -import nl.jqno.equalsverifier.Warning; -import org.junit.Before; -import org.junit.Test; -import org.reflections.Reflections; -import org.reflections.scanners.SubTypesScanner; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -import static org.junit.Assert.assertTrue; - -/** - * Stas Parshin - * 31 May 2017 - */ -public class ModelTest { - - private Set> classes; - private final Map, Supplier> customInstance = new HashMap<>(); - - @Before - public void setClasses() { - String modelPackage = Animation.class.getPackage().getName(); - String passportPackage = Credentials.class.getPackage().getName(); - List packages = Arrays.asList(modelPackage, passportPackage); - - classes = new Reflections(packages, new SubTypesScanner(false)) - .getSubTypesOf(Object.class) - .stream() - .filter(clazz -> packages.contains(clazz.getPackage().getName()) - && !clazz.getSimpleName().startsWith("PassportElementError") - && !Modifier.isAbstract(clazz.getModifiers()) - ).collect(Collectors.toSet()); - - // classes from model/request available in responses - classes.add(InlineKeyboardMarkup.class); - classes.add(InlineKeyboardButton.class); - } - - @Test - public void testEquals() throws ReflectiveOperationException { - CallbackQuery callbackQuery = CallbackQuery.class.getDeclaredConstructor().newInstance(); - Field f = CallbackQuery.class.getDeclaredField("id"); - f.setAccessible(true); - f.set(callbackQuery, "2"); - - Message message = Message.class.getDeclaredConstructor().newInstance(); - f = MaybeInaccessibleMessage.class.getDeclaredField("message_id"); - f.setAccessible(true); - f.set(message, 11); - - Update update = Update.class.getDeclaredConstructor().newInstance(); - f = Update.class.getDeclaredField("update_id"); - f.setAccessible(true); - f.set(update, 1); - - Chat chat = new Chat(); - f = Chat.class.getDeclaredField("id"); - f.setAccessible(true); - f.set(chat, 1L); - - for (Class c : classes) { - EqualsVerifierApi verifierApi = EqualsVerifier.forClass(c) - .usingGetClass() - .withPrefabValues(Update.class, Update.class.getDeclaredConstructor().newInstance(), update) - .withPrefabValues(Message.class, Message.class.getDeclaredConstructor().newInstance(), message) - .withPrefabValues(CallbackQuery.class, CallbackQuery.class.getDeclaredConstructor().newInstance(), callbackQuery) - .withPrefabValues(Chat.class, new Chat(), chat) - .suppress(Warning.STRICT_HASHCODE) - .suppress(Warning.NONFINAL_FIELDS); - - if (c == Message.class) { - verifierApi.withIgnoredFields("video_chat_started"); - verifierApi.withIgnoredFields("forum_topic_closed"); - verifierApi.withIgnoredFields("forum_topic_reopened"); - verifierApi.withIgnoredFields("general_forum_topic_hidden"); - verifierApi.withIgnoredFields("general_forum_topic_unhidden"); - } - - verifierApi.verify(); - } - } - - @Test - public void testToString() throws Exception { - for (Class c : classes) { - Object instance = customInstance.containsKey(c) ? customInstance.get(c).get() : defaultInstance(c); - String toString = instance.toString(); - for (Field f : c.getDeclaredFields()) { - if (Modifier.isStatic(f.getModifiers())) { - continue; - } - assertTrue(c.getSimpleName() + " toString doesn't contain " + f.getName(), toString.contains(f.getName())); - } - } - } - - private R defaultInstance(Class c) throws Exception { - Constructor constructor = c.getDeclaredConstructor(); - constructor.setAccessible(true); - return constructor.newInstance(); - } -} diff --git a/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt b/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt new file mode 100644 index 00000000..163bc4af --- /dev/null +++ b/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt @@ -0,0 +1,124 @@ +package com.pengrad.telegrambot + +import com.pengrad.telegrambot.model.* +import com.pengrad.telegrambot.model.botcommandscope.BotCommandScope +import com.pengrad.telegrambot.model.chatbackground.BackgroundTypeWallpaper +import com.pengrad.telegrambot.model.message.MaybeInaccessibleMessage +import com.pengrad.telegrambot.model.request.InlineKeyboardButton +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.model.request.ParseMode +import com.pengrad.telegrambot.passport.Credentials +import com.pengrad.telegrambot.passport.decrypt.Decrypt +import nl.jqno.equalsverifier.EqualsVerifier +import nl.jqno.equalsverifier.Warning +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.reflections.Reflections +import org.reflections.scanners.SubTypesScanner +import sun.misc.Unsafe +import java.lang.reflect.Modifier +import java.util.* + +/** + * Stas Parshin + * 31 May 2017 + */ +class ModelTest { + + private var classes = mutableSetOf>() + private val customInstance = mutableMapOf, () -> Any>() + + @Before + fun setClasses() { + val modelPackage = Animation::class.java.getPackage().name + val passportPackage = Credentials::class.java.getPackage().name + val packages = listOf(modelPackage, passportPackage) + val excludedPackages = listOf( + ParseMode::class, + BotCommandScope::class, + Decrypt::class + ).map { it.java.`package`.name } + + classes.addAll(Reflections(packages, SubTypesScanner(false)) + .getSubTypesOf(Any::class.java) + .filter { + !excludedPackages.contains(it.getPackage().name) + && !it.simpleName.startsWith("PassportElementError") + && !Modifier.isAbstract(it.modifiers) + }) + + // classes from model/request available in responses + classes.add(InlineKeyboardMarkup::class.java) + classes.add(InlineKeyboardButton::class.java) + + customInstance[BackgroundTypeWallpaper::class.java] = { BackgroundTypeWallpaper(Document(), 1) } + } + + @Test + @Throws(ReflectiveOperationException::class) + fun testEquals() { + val prefabs = listOf( + CallbackQuery().apply { + javaClass.getDeclaredField("id").apply { isAccessible = true }.set(this, "2") + }, + Message().apply { + MaybeInaccessibleMessage::class.java.getDeclaredField("message_id").apply { isAccessible = true } + .set(this, 11) + }, + Update().apply { + javaClass.getDeclaredField("update_id").apply { isAccessible = true }.set(this, 1) + }, + Chat().apply { + javaClass.getDeclaredField("id").apply { isAccessible = true }.set(this, 1L) + } + ) + + for (c in classes) { + val verifierApi = EqualsVerifier.forClass(c) + .usingGetClass() + .suppress(Warning.STRICT_HASHCODE) + .suppress(Warning.NONFINAL_FIELDS) + + prefabs.forEach { + verifierApi.withPrefabValues(it.javaClass, it.javaClass.getDeclaredConstructor().newInstance(), it) + } + + if (c == Message::class.java) { + verifierApi.withIgnoredFields("video_chat_started") + verifierApi.withIgnoredFields("forum_topic_closed") + verifierApi.withIgnoredFields("forum_topic_reopened") + verifierApi.withIgnoredFields("general_forum_topic_hidden") + verifierApi.withIgnoredFields("general_forum_topic_unhidden") + } + + verifierApi.verify() + } + } + + @Test + @Throws(Exception::class) + fun testToString() { + for (c in classes) { + val instance = customInstance[c]?.invoke() ?: defaultInstance(c) + val toString = instance.toString() + for (f in c.declaredFields) { + if (Modifier.isStatic(f.modifiers)) { + continue + } + Assert.assertTrue(c.simpleName + " toString doesn't contain " + f.name, toString.contains(f.name)) + } + } + } + + private fun defaultInstance(c: Class): R { + try { + return c.getDeclaredConstructor().apply { isAccessible = true }.newInstance() + } catch (e: Exception) { + val unsafeClass = Class.forName("sun.misc.Unsafe") + val unsafe = unsafeClass.getDeclaredField("theUnsafe").apply { isAccessible = true }.get(null) as Unsafe + @Suppress("UNCHECKED_CAST") + return unsafe.allocateInstance(c) as R + } + } +}