Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Restyle test: Add test for conference invites. #111

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions pytox/toxcore/tox.pyi
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# pytox.toxcore.tox
from types import TracebackType
from typing import Any
from typing import List
from typing import Optional
from typing import TypeVar
import enum
Expand Down Expand Up @@ -112,16 +111,16 @@ class Tox_Ptr:
address: Any
def bootstrap(self, host: str, port: int, public_key: bytes) -> bool: ...
def conference_by_id(self, id: bytes) -> Tox_Conference_Number: ...
conference_chatlist: Any
def conference_delete(self, conference_number: Tox_Conference_Number) -> None: ...
def conference_get_chatlist(self) -> List[Tox_Conference_Number]: ...
def conference_get_id(self, conference_number: Tox_Conference_Number) -> bytes: ...
def conference_get_offline_peer_count(self, conference_number: Tox_Conference_Number) -> int: ...
def conference_get_peer_count(self, conference_number: Tox_Conference_Number) -> int: ...
def conference_get_peer_name(self, conference_number: Tox_Conference_Number, peer_number: Tox_Conference_Peer_Number) -> bytes: ...
def conference_get_title(self, conference_number: Tox_Conference_Number) -> bytes: ...
def conference_get_type(self, conference_number: Tox_Conference_Number) -> Tox_Conference_Type: ...
def conference_invite(self, friend_number: Tox_Friend_Number, conference_number: Tox_Conference_Number) -> None: ...
def conference_join(self, conference_number: Tox_Conference_Number, cookie: bytes) -> Tox_Conference_Number: ...
def conference_join(self, friend_number: Tox_Friend_Number, cookie: bytes) -> Tox_Conference_Number: ...
def conference_new(self) -> Tox_Conference_Number: ...
def conference_offline_peer_get_last_active(self, conference_number: Tox_Conference_Number, offline_peer_number: Tox_Conference_Offline_Peer_Number) -> int: ...
def conference_offline_peer_get_name(self, conference_number: Tox_Conference_Number, offline_peer_number: Tox_Conference_Offline_Peer_Number) -> bytes: ...
Expand Down Expand Up @@ -150,6 +149,7 @@ class Tox_Ptr:
def friend_get_status(self, friend_number: Tox_Friend_Number) -> Tox_User_Status: ...
def friend_get_status_message(self, friend_number: Tox_Friend_Number) -> bytes: ...
def friend_get_typing(self, friend_number: Tox_Friend_Number) -> bool: ...
friend_list: Any
def friend_send_lossless_packet(self, friend_number: Tox_Friend_Number, data: bytes) -> None: ...
def friend_send_lossy_packet(self, friend_number: Tox_Friend_Number, data: bytes) -> None: ...
def friend_send_message(self, friend_number: Tox_Friend_Number, type_: Tox_Message_Type, message: bytes) -> Tox_Friend_Message_Id: ...
Expand Down
17 changes: 14 additions & 3 deletions pytox/toxcore/tox.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,16 @@ cdef class Tox_Ptr:
def friend_exists(self, friend_number: Tox_Friend_Number) -> bool:
return tox_friend_exists(self._get(), friend_number)

@property
def friend_list(self) -> list[Tox_Friend_Number]:
cdef size_t size = tox_self_get_friend_list_size(self._get())
cdef Tox_Friend_Number *data = <Tox_Friend_Number*> malloc(size * sizeof(Tox_Friend_Number))
try:
tox_self_get_friend_list(self._get(), data)
return [data[i] for i in range(size)]
finally:
free(data)

def friend_get_public_key(self, friend_number: Tox_Friend_Number) -> bytes:
cdef size_t size = tox_public_key_size()
cdef uint8_t *data = <uint8_t*> malloc(size * sizeof(uint8_t))
Expand Down Expand Up @@ -741,9 +751,9 @@ cdef class Tox_Ptr:
if err:
raise ApiException(Tox_Err_Conference_Invite(err))

def conference_join(self, conference_number: Tox_Conference_Number, cookie: bytes) -> Tox_Conference_Number:
def conference_join(self, friend_number: Tox_Friend_Number, cookie: bytes) -> Tox_Conference_Number:
cdef Tox_Err_Conference_Join err = TOX_ERR_CONFERENCE_JOIN_OK
cdef Tox_Conference_Number res = tox_conference_join(self._get(), conference_number, cookie, len(cookie), &err)
cdef Tox_Conference_Number res = tox_conference_join(self._get(), friend_number, cookie, len(cookie), &err)
if err:
raise ApiException(Tox_Err_Conference_Join(err))
return res
Expand Down Expand Up @@ -860,7 +870,8 @@ cdef class Tox_Ptr:
raise ApiException(Tox_Err_Conference_Peer_Query(err))
return res

def conference_get_chatlist(self) -> List[Tox_Conference_Number]:
@property
def conference_chatlist(self) -> list[Tox_Conference_Number]:
cdef size_t size = tox_conference_get_chatlist_size(self._get())
cdef Tox_Conference_Number *data = <Tox_Conference_Number*> malloc(size * sizeof(Tox_Conference_Number))
try:
Expand Down
113 changes: 3 additions & 110 deletions test/auto_tests/self_connection_status_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import time
import unittest
from dataclasses import dataclass
from dataclasses import field
from typing import Callable

import pytox.toxcore.tox as core
Expand All @@ -16,14 +15,7 @@ class TestException(Exception):
@dataclass
class FriendInfo:
connection_status: core.Tox_Connection = core.TOX_CONNECTION_NONE
status: core.Tox_User_Status = core.TOX_USER_STATUS_NONE
status_message: bytes = b""
name: bytes = b""
request_message: bytes = b""
messages: list[tuple[core.Tox_Message_Type, bytes]] = field(
default_factory=list)
lossy_packets: list[bytes] = field(default_factory=list)
lossless_packets: list[bytes] = field(default_factory=list)


class TestTox(core.Tox_Ptr):
Expand All @@ -42,41 +34,16 @@ def handle_self_connection_status(self,
self.connection_status_from_cb = connection_status
raise TestException(connection_status)

def handle_friend_request(self, public_key: bytes, message: bytes) -> None:
friend_number = self.friend_add_norequest(public_key)
self.friends[friend_number].request_message = message

def handle_friend_connection_status(
self,
friend_number: int,
connection_status: core.Tox_Connection,
) -> None:
self.friends[friend_number].connection_status = connection_status

def handle_friend_message(self, friend_number: int,
type_: core.Tox_Message_Type,
message: bytes) -> None:
self.friends[friend_number].messages.append((type_, message))

def handle_friend_lossy_packet(self, friend_number: int,
message: bytes) -> None:
self.friends[friend_number].lossy_packets.append(message)
raise Exception("OMG")

def handle_friend_lossless_packet(self, friend_number: int,
message: bytes) -> None:
self.friends[friend_number].lossless_packets.append(message)

def handle_friend_name(self, friend_number: int, name: bytes) -> None:
self.friends[friend_number].name = name

def handle_friend_status(self, friend_number: int,
status: core.Tox_User_Status) -> None:
self.friends[friend_number].status = status

def handle_friend_status_message(self, friend_number: int,
status_message: bytes) -> None:
self.friends[friend_number].status_message = status_message
def handle_friend_request(self, public_key: bytes, message: bytes) -> None:
friend_number = self.friend_add_norequest(public_key)
self.friends[friend_number].request_message = message


class AutoTest(unittest.TestCase):
Expand Down Expand Up @@ -149,80 +116,6 @@ def test_friend_add(self) -> None:
b"lala lala lala la I'm Mr. Happy Face",
)

def test_friend_by_public_key(self) -> None:
with self.assertRaises(core.ApiException) as ex:
# We're not our own friend.
self.tox1.friend_by_public_key(self.tox1.public_key)
self.assertEqual(ex.exception.error,
core.TOX_ERR_FRIEND_BY_PUBLIC_KEY_NOT_FOUND)

def test_send_message(self) -> None:
self._wait_for_friend_online()
self.tox1.friend_send_message(0, core.TOX_MESSAGE_TYPE_NORMAL,
b"hello there!")
friend = self.tox2.friends[self.tox2.friend_by_public_key(
self.tox1.public_key)]
self._iterate(100, lambda: not friend.messages)
self.assertEqual(friend.messages[0],
(core.TOX_MESSAGE_TYPE_NORMAL, b"hello there!"))

# TODO(iphydf): This one doesn't pass. Investigate why.
# def test_send_lossy_packet(self) -> None:
# self._wait_for_friend_online()
# self.tox1.friend_send_lossy_packet(0, b"\xc0hello there!")
# friend = self.tox2.friends[self.tox2.friend_by_public_key(
# self.tox1.public_key)]
# self._iterate(100, lambda: not friend.lossy_packets)
# self.assertEqual(friend.lossy_packets[0], b"\xc0hello there!")

def test_send_lossless_packet(self) -> None:
self._wait_for_friend_online()
self.tox1.friend_send_lossless_packet(0, b"\xa0general kenobi.")
friend = self.tox2.friends[self.tox2.friend_by_public_key(
self.tox1.public_key)]
self._iterate(100, lambda: not friend.lossless_packets)
self.assertEqual(friend.lossless_packets[0], b"\xa0general kenobi.")

def test_status(self) -> None:
self._wait_for_friend_online()
self.assertEqual(self.tox1.status, core.TOX_USER_STATUS_NONE)
self.tox1.status = core.TOX_USER_STATUS_AWAY
self.assertEqual(self.tox1.status, core.TOX_USER_STATUS_AWAY)
friend_number = self.tox2.friend_by_public_key(self.tox1.public_key)
friend = self.tox2.friends[friend_number]
self._iterate(100, lambda: friend.status == core.TOX_USER_STATUS_NONE)
self.assertEqual(friend.status, core.TOX_USER_STATUS_AWAY)
self.assertEqual(self.tox2.friend_get_status(friend_number),
core.TOX_USER_STATUS_AWAY)

def test_name(self) -> None:
self._wait_for_friend_online()
self.assertEqual(self.tox1.name, b"")
self.tox1.name = b"Now that's a name I haven't heard in a long time"
self.assertEqual(self.tox1.name,
b"Now that's a name I haven't heard in a long time")
friend_number = self.tox2.friend_by_public_key(self.tox1.public_key)
friend = self.tox2.friends[friend_number]
self._iterate(100, lambda: friend.name == b"")
self.assertEqual(friend.name,
b"Now that's a name I haven't heard in a long time")
self.assertEqual(
self.tox2.friend_get_name(friend_number),
b"Now that's a name I haven't heard in a long time",
)

def test_status_message(self) -> None:
self._wait_for_friend_online()
self.assertEqual(self.tox1.status_message, b"")
self.tox1.status_message = b"Python rocks!"
self.assertEqual(self.tox1.status_message, b"Python rocks!")
friend_number = self.tox2.friend_by_public_key(self.tox1.public_key)
friend = self.tox2.friends[friend_number]
self._iterate(100, lambda: friend.status_message == b"")
self.assertEqual(friend.status_message, b"Python rocks!")
self.assertEqual(self.tox2.friend_get_status_message(friend_number),
b"Python rocks!")


if __name__ == "__main__":
unittest.main()
Loading