58 lines
2.5 KiB
Python
58 lines
2.5 KiB
Python
from unittest import TestCase, main
|
|
|
|
from sms_counter import SMSCounter
|
|
|
|
|
|
class SMSCounterTestCase(TestCase):
|
|
""" Tests for sms counting """
|
|
GSM_7BIT_LEN = 160
|
|
GSM_7BIT_LEN_MULTIPART = 153
|
|
UTF16_LEN = 70
|
|
UTF16_LEN_MULTIPART = 67
|
|
GSM_7BIT_CHAR_MAP = list(map(chr, SMSCounter._get_gsm_7bit_map()))
|
|
GSM_7BIT_EX_CHAR_MAP = list(map(chr, SMSCounter._get_added_gsm_7bit_ex_map()))
|
|
|
|
def _check_gsm_7bit_sms_length(self, counter, message, message_max_length=GSM_7BIT_LEN):
|
|
length_error = 'Message length should be less than {} symbols'.format(message_max_length)
|
|
self.assertLessEqual(len(message), counter.get('per_message'), length_error)
|
|
self.assertEqual(len(message), counter.get('length'))
|
|
self.assertEqual(counter.get('messages'), 1, 'Message is not multipart')
|
|
|
|
def test_gsm_7bit_chars(self):
|
|
message = self.GSM_7BIT_CHAR_MAP[:self.GSM_7BIT_LEN]
|
|
counter = SMSCounter.count(message)
|
|
self._check_gsm_7bit_sms_length(counter, message)
|
|
self.assertEqual(counter.get('encoding'), SMSCounter.GSM_7BIT)
|
|
|
|
def test_gsm_7bit_ex_chars(self):
|
|
message = self.GSM_7BIT_CHAR_MAP + self.GSM_7BIT_EX_CHAR_MAP
|
|
message = message[:self.GSM_7BIT_LEN]
|
|
counter = SMSCounter.count(message)
|
|
self._check_gsm_7bit_sms_length(counter, message)
|
|
self.assertEqual(counter.get('encoding'), SMSCounter.GSM_7BIT_EX)
|
|
|
|
def test_utf_chars(self):
|
|
utf_message = ['£', 'ф', '±'] + self.GSM_7BIT_CHAR_MAP
|
|
utf_message = utf_message[:self.UTF16_LEN]
|
|
counter = SMSCounter.count(utf_message)
|
|
self._check_gsm_7bit_sms_length(counter, utf_message, self.UTF16_LEN)
|
|
self.assertEqual(counter.get('encoding'), SMSCounter.UTF16)
|
|
|
|
def test_multipart_sms_gsm_7bit(self):
|
|
message = self.GSM_7BIT_CHAR_MAP + self.GSM_7BIT_EX_CHAR_MAP
|
|
double_message = message[:self.GSM_7BIT_LEN_MULTIPART] * 2
|
|
counter = SMSCounter.count(double_message)
|
|
self.assertEqual(counter.get('encoding'), SMSCounter.GSM_7BIT_EX)
|
|
self.assertEqual(counter.get('messages'), 2, 'Message must contains from 2 parts')
|
|
|
|
def test_multipart_sms_utf(self):
|
|
utf_message = ['£', 'ф', '±'] + self.GSM_7BIT_CHAR_MAP
|
|
double_utf_message = utf_message[:self.UTF16_LEN_MULTIPART] * 2
|
|
counter = SMSCounter.count(double_utf_message)
|
|
self.assertEqual(counter.get('encoding'), SMSCounter.UTF16)
|
|
self.assertEqual(counter.get('messages'), 2, 'Message must contains from 2 parts')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|