diff --git a/Facepunch.Steamworks.Test/Facepunch.Steamworks.Test.csproj b/Facepunch.Steamworks.Test/Facepunch.Steamworks.Test.csproj
index 6507d08..f6dbdbd 100644
--- a/Facepunch.Steamworks.Test/Facepunch.Steamworks.Test.csproj
+++ b/Facepunch.Steamworks.Test/Facepunch.Steamworks.Test.csproj
@@ -88,6 +88,7 @@
+
diff --git a/Facepunch.Steamworks.Test/FriendsTest.cs b/Facepunch.Steamworks.Test/FriendsTest.cs
new file mode 100644
index 0000000..710e5d3
--- /dev/null
+++ b/Facepunch.Steamworks.Test/FriendsTest.cs
@@ -0,0 +1,174 @@
+using System;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System.Linq;
+using System.Threading.Tasks;
+using Steamworks.Data;
+
+namespace Steamworks
+{
+ [DeploymentItem( "steam_api64.dll" )]
+ [TestClass]
+ public class FriendsTest
+ {
+ [TestMethod]
+ public void GetFriends()
+ {
+ foreach ( var friend in SteamFriends.GetFriends() )
+ {
+ Console.WriteLine( $"{friend.Id.Value}: {friend.Name} (Friend:{friend.IsFriend}) (Blocked:{friend.IsBlocked})" );
+ Console.WriteLine( $" {string.Join( ", ", friend.NameHistory )}" );
+
+ // Assert.IsNotNull( friend.GetAvatar( Steamworks.Friends.AvatarSize.Medium ) );
+ }
+ }
+
+ [TestMethod]
+ public void GetBlocked()
+ {
+ foreach ( var friend in SteamFriends.GetBlocked() )
+ {
+ Console.WriteLine( $"{friend.Id.Value}: {friend.Name} (Friend:{friend.IsFriend}) (Blocked:{friend.IsBlocked})" );
+ Console.WriteLine( $" {string.Join( ", ", friend.NameHistory )}" );
+
+ // Assert.IsNotNull( friend.GetAvatar( Steamworks.Friends.AvatarSize.Medium ) );
+ }
+ }
+
+ [TestMethod]
+ public void GetPlayedWith()
+ {
+ foreach ( var friend in SteamFriends.GetPlayedWith() )
+ {
+ Console.WriteLine( $"{friend.Id.Value}: {friend.Name} (Friend:{friend.IsFriend}) (Blocked:{friend.IsBlocked})" );
+ Console.WriteLine( $" {string.Join( ", ", friend.NameHistory )}" );
+
+ // Assert.IsNotNull( friend.GetAvatar( Steamworks.Friends.AvatarSize.Medium ) );
+ }
+ }
+
+ [TestMethod]
+ public async Task LargeAvatar()
+ {
+ ulong id = (ulong)(76561197960279927 + (new Random().Next() % 10000));
+
+ var image = await SteamFriends.GetLargeAvatarAsync( id );
+ if ( !image.HasValue )
+ return;
+
+ Console.WriteLine( $"image.Width {image.Value.Width}" );
+ Console.WriteLine( $"image.Height {image.Value.Height}" );
+
+ DrawImage( image.Value );
+ }
+
+ [TestMethod]
+ public async Task MediumAvatar()
+ {
+ ulong id = (ulong)(76561197960279927 + (new Random().Next() % 10000));
+
+ Console.WriteLine( $"Steam: http://steamcommunity.com/profiles/{id}" );
+
+ var image = await SteamFriends.GetMediumAvatarAsync( id );
+ if ( !image.HasValue )
+ return;
+
+ Console.WriteLine( $"image.Width {image.Value.Width}" );
+ Console.WriteLine( $"image.Height {image.Value.Height}" );
+
+ DrawImage( image.Value );
+ }
+
+ [TestMethod]
+ public async Task SmallAvatar()
+ {
+ ulong id = (ulong)(76561197960279927 + (new Random().Next() % 10000));
+
+ var image = await SteamFriends.GetSmallAvatarAsync( id );
+ if ( !image.HasValue )
+ return;
+
+ Console.WriteLine( $"image.Width {image.Value.Width}" );
+ Console.WriteLine( $"image.Height {image.Value.Height}" );
+
+ DrawImage( image.Value );
+ }
+
+ [TestMethod]
+ public async Task GetFriendsAvatars()
+ {
+ foreach ( var friend in SteamFriends.GetFriends() )
+ {
+ Console.WriteLine( $"{friend.Id.Value}: {friend.Name}" );
+
+ var image = await friend.GetSmallAvatarAsync();
+ if ( image.HasValue )
+ {
+ DrawImage( image.Value );
+ }
+
+ // Assert.IsNotNull( friend.GetAvatar( Steamworks.Friends.AvatarSize.Medium ) );
+ }
+ }
+
+ /*
+ [TestMethod]
+ public void FriendListWithoutRefresh()
+ {
+ using ( var client = new Facepunch.Steamworks.Client( 252490 ) )
+ {
+ Assert.IsTrue( client.IsValid );
+
+ foreach ( var friend in client.Friends.All )
+ {
+ Console.WriteLine( "{0}: {1} (Friend:{2}) (Blocked:{3})", friend.Id, friend.Name, friend.IsFriend, friend.IsBlocked );
+ }
+ }
+ }
+
+
+
+ [TestMethod]
+ public void CachedAvatar()
+ {
+ using (var client = new Facepunch.Steamworks.Client(252490))
+ {
+ Assert.IsTrue(client.IsValid);
+
+ var friend = client.Friends.All.First();
+
+ var image = client.Friends.GetCachedAvatar( Steamworks.Friends.AvatarSize.Medium, friend.Id );
+
+ if (image != null)
+ {
+ Assert.AreEqual(image.Width, 64);
+ Assert.AreEqual(image.Height, 64);
+ Assert.AreEqual(image.Data.Length, image.Width * image.Height * 4);
+ }
+ }
+ }
+ */
+ public static void DrawImage( Image img )
+ {
+ var grad = " -:+#";
+
+ for ( int y = 0; y < img.Height; y++ )
+ {
+ var str = "";
+
+ for ( int x = 0; x < img.Width; x++ )
+ {
+ var p = img.GetPixel( x, y );
+
+ var brightness = 1 - ((float)(p.r + p.g + p.b) / (255.0f * 3.0f));
+ var c = (int)((grad.Length) * brightness);
+ if ( c > 3 ) c = 3;
+ str += grad[c];
+
+ }
+
+ Console.WriteLine( str );
+ }
+ }
+
+ }
+}
\ No newline at end of file