fix(perception): Resolve OWN_PROFILE shadowing by OTHER_PROFILE heuristic (TDD)

This commit is contained in:
2026-04-25 22:35:48 +02:00
parent 5b53a7e4c0
commit ddbe8f8e99
2 changed files with 41 additions and 0 deletions

View File

@@ -178,6 +178,8 @@ class ScreenIdentity:
return ScreenType.FOLLOW_LIST
if "profile_header_container" in ids:
if selected_tab == "profile_tab":
return ScreenType.OWN_PROFILE
return ScreenType.OTHER_PROFILE
# Reels structural markers — present even when Instagram hides the tab bar

View File

@@ -0,0 +1,39 @@
import pytest
from GramAddict.core.perception.screen_identity import ScreenIdentity, ScreenType
def test_screen_identity_own_profile_vs_other_profile():
identity = ScreenIdentity("marisaundmarc")
# When we are on our OWN profile, 'profile_tab' is selected,
# but 'profile_header_container' is ALSO present.
# The bug is that 'profile_header_container' shadows 'profile_tab' selected=True.
# Let's create an XML dump that mimics this scenario:
own_profile_xml = """<?xml version="1.0" encoding="utf-8"?>
<hierarchy>
<node package="com.instagram.android" resource-id="com.instagram.android:id/profile_header_container" text="" content-desc="" clickable="false" bounds="[0,0][100,100]" />
<node package="com.instagram.android" resource-id="com.instagram.android:id/profile_tab" selected="true" text="" content-desc="Profile" clickable="true" bounds="[0,0][100,100]" />
</hierarchy>
"""
result = identity.identify(own_profile_xml)
assert result["screen_type"] == ScreenType.OWN_PROFILE, "Failed! own profile was classified as OTHER_PROFILE because profile_header_container shadowed it."
def test_screen_identity_other_profile_vs_own_profile():
identity = ScreenIdentity("marisaundmarc")
# When we are on someone ELSE's profile, 'profile_tab' is NOT selected
# (or maybe 'feed_tab' or 'search_tab' is selected, or none).
# And 'profile_header_container' is present.
other_profile_xml = """<?xml version="1.0" encoding="utf-8"?>
<hierarchy>
<node package="com.instagram.android" resource-id="com.instagram.android:id/profile_header_container" text="" content-desc="" clickable="false" bounds="[0,0][100,100]" />
<node package="com.instagram.android" resource-id="com.instagram.android:id/feed_tab" selected="true" text="" content-desc="Home" clickable="true" bounds="[0,0][100,100]" />
</hierarchy>
"""
result = identity.identify(other_profile_xml)
assert result["screen_type"] == ScreenType.OTHER_PROFILE, "Failed! other profile was not classified as OTHER_PROFILE."