From bd22232c72b3185b622daf520f91cc93b86e6580 Mon Sep 17 00:00:00 2001
From: Jamie Bliss <jamie@ivyleav.es>
Date: Tue, 14 May 2019 10:19:48 -0400
Subject: [PATCH 1/4] Sprites: Special case __main__ and use CWD in that case

---
 ppb/sprites.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/ppb/sprites.py b/ppb/sprites.py
index 03e648c7..7d3ef295 100644
--- a/ppb/sprites.py
+++ b/ppb/sprites.py
@@ -1,8 +1,5 @@
 from inspect import getfile
-from numbers import Number
-from os.path import realpath
 from pathlib import Path
-from typing import Dict, Iterable, Sequence
 from typing import Union
 
 from ppb import Vector
@@ -296,5 +293,8 @@ def __image__(self):
 
     def __resource_path__(self):
         if self.resource_path is None:
-            self.resource_path = Path(realpath(getfile(type(self)))).absolute().parent
+            if type(self).__module__ == '__main__':
+                self.resource_path = Path.cwd().resolve()
+            else:
+                self.resource_path = Path(getfile(type(self))).resolve().parent
         return self.resource_path

From 9deef050cc24e77114428e3fe2c2a471dd24c25e Mon Sep 17 00:00:00 2001
From: Jamie Bliss <jamie@ivyleav.es>
Date: Tue, 14 May 2019 10:24:31 -0400
Subject: [PATCH 2/4] Add tests

---
 tests/test_sprites.py | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/tests/test_sprites.py b/tests/test_sprites.py
index 1a264f1f..3ee933dc 100644
--- a/tests/test_sprites.py
+++ b/tests/test_sprites.py
@@ -325,3 +325,14 @@ def test_rotatable_base_sprite():
 
     test_sprite.rotate(1)
     assert test_sprite.rotation == 1
+
+
+def test_sprite_in_main():
+    class TestSprite(BaseSprite):
+        pass
+
+    TestSprite.__module__ = '__main__'
+
+    s = TestSprite()
+
+    assert s.__resource_path__()  # We don't care what it is, as long as it's something

From c9be483d6c6dd23f50abf0d2265f748f5420a8ee Mon Sep 17 00:00:00 2001
From: Piper Thunstrom <pathunstrom@gmail.com>
Date: Tue, 14 May 2019 18:40:01 -0400
Subject: [PATCH 3/4] Uses patch to simulate the failure state.

---
 ppb/sprites.py        | 10 ++++++----
 tests/test_sprites.py | 11 ++++++++---
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/ppb/sprites.py b/ppb/sprites.py
index 7d3ef295..cdb0efe2 100644
--- a/ppb/sprites.py
+++ b/ppb/sprites.py
@@ -1,4 +1,5 @@
 from inspect import getfile
+from os.path import realpath
 from pathlib import Path
 from typing import Union
 
@@ -293,8 +294,9 @@ def __image__(self):
 
     def __resource_path__(self):
         if self.resource_path is None:
-            if type(self).__module__ == '__main__':
-                self.resource_path = Path.cwd().resolve()
-            else:
-                self.resource_path = Path(getfile(type(self))).resolve().parent
+            try:
+                file_path = Path(getfile(type(self))).resolve().parent
+            except TypeError:
+                file_path = Path.cwd().resolve()
+            self.resource_path = file_path
         return self.resource_path
diff --git a/tests/test_sprites.py b/tests/test_sprites.py
index 3ee933dc..da84761f 100644
--- a/tests/test_sprites.py
+++ b/tests/test_sprites.py
@@ -1,4 +1,5 @@
 from unittest import TestCase
+from unittest.mock import patch
 
 from ppb import BaseSprite, Vector
 from ppb.sprites import Rotatable
@@ -328,11 +329,15 @@ def test_rotatable_base_sprite():
 
 
 def test_sprite_in_main():
+    """
+    Test that Sprite.__resource_path__ returns a meaningful value inside
+    REPLs where __main__ doesn't have a file.
+    """
     class TestSprite(BaseSprite):
         pass
 
-    TestSprite.__module__ = '__main__'
-
     s = TestSprite()
 
-    assert s.__resource_path__()  # We don't care what it is, as long as it's something
+    with patch("ppb.sprites.getfile", side_effect=TypeError):
+        # This patch simulates what happens when TestSprite was defined in the REPL
+        assert s.__resource_path__()  # We don't care what it is, as long as it's something

From 2a642c7d4e43bc18fbdb7c39e3a1060f1ed73324 Mon Sep 17 00:00:00 2001
From: Piper Thunstrom <pathunstrom@gmail.com>
Date: Tue, 14 May 2019 18:42:43 -0400
Subject: [PATCH 4/4] Removes unneeded realpath import.

---
 ppb/sprites.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/ppb/sprites.py b/ppb/sprites.py
index cdb0efe2..f9b0cf8e 100644
--- a/ppb/sprites.py
+++ b/ppb/sprites.py
@@ -1,5 +1,4 @@
 from inspect import getfile
-from os.path import realpath
 from pathlib import Path
 from typing import Union