Esempio n. 1
0
 def test_calculateMarkupsLength(self):
     text = '[b][cy]0[/cy][/b] for RT'
     self.assertEqual(HelpUtil._calculateMarkupsLength(text), 16)
     text = '[b][cy]21/12 or 21/12/19 or 21/12/2019[/c][/b]. If no year is specified'
     self.assertEqual(HelpUtil._calculateMarkupsLength(text), 15)
     text = '[n][b][color=ffff00ff]21/12 or 21/12/19 or 21/12/2019[/color][/b]. If no year is '
     self.assertEqual(HelpUtil._calculateMarkupsLength(text), 34)
Esempio n. 2
0
    def test_splitLongLineToShorterLinesEmptyNote(self):
        note = ''
        maxNoteLineLen = 30

        multilineNote = HelpUtil._splitLongLineToShorterLines(note, maxNoteLineLen)

        self.assertEqual(len(multilineNote), 0)
Esempio n. 3
0
    def test_splitTabbedLineToShorterTabbedLinesShortTabbedParagraph(self):
        text = '[t]a first right shifted'

        width = 30
        list = HelpUtil._splitTabbedLineToShorterTabbedLines(text, width)
        self.assertEqual(1, len(list))
        self.assertEqual(list[0],'[t]a first right shifted')
Esempio n. 4
0
    def testSizeParagraphsForKivyLabelAllShiftedLinesHaveForcedLineBreakCodeFile(self):
        '''
        This test ensures that text resizing for the Kivy label destination works
        on a help file where the not shifted long lines are sized for better reading
        at help write time.
        '''
        FILE_PATH = 'all_shifted_lines_have_break_code.txt'
        resizedTextPageList = ''
        width = 54

        with open(FILE_PATH) as file:
            resizedTextPageList = HelpUtil.sizeParagraphsForKivyLabelFromFile(file, width)

        self.assertEqual('''
<date time> possible values:

    [b][color=ffff00ff]0[/color][/b] for RT
    [b][color=ffff00ff]21/12 or 21/12/19 or 21/12/2019[/color][/b]. If no year is
    specified, current year is assumed. If no time is
    specified, current time is assumed.
''',
                         resizedTextPageList[0])

        self.assertEqual('''
[b]Output price qualifiers[/b]:

    R = RT
    M = Minute price (precision at the minute)
    C = Close price

[color=ffff00ff]btc usd 0 bittrex -v0.01btc[/color] -->
0.01 BTC/191.2 USD on BitTrex: 16/12/17 22:10R 19120''',
                     resizedTextPageList[1])
Esempio n. 5
0
    def test_sizeParagraphsForKivyLabelWithLongMarkupColorAndTabbedParagraphsFromFile(self):
        FILE_PATH = 'regularAndShiftedPopupLongMarkupTest.txt'
        text = ''

        with open(FILE_PATH) as file:
            text = file.read()

        width = 54
        resizedText = HelpUtil._sizeParagraphsForKivyLabel(text, width)
        self.assertEqual('''
[b][color=ff0000]CryptoPricer full and long title request[/color][/b]

btc usd 0 all

Returns the current price of 1 btc in usd.

This is a long explanation which will occupy several lines once reorganized by the Label itself.
    The [b][color=ffff00ff]price[/color][/b] is an average of the btc quotation on
    all the exchanges. It is computed by the crypto
    prices provider.
no tab line

    * new tabbed line

    * other tabbed line
    
    * last tabbed line


[b][color=19ff52ff]Next section[/color][/b]

This section explains the preceeding section''', resizedText)
Esempio n. 6
0
    def test_encodeShiftedLinesWithTabCodeAndForcedLineBreak(self):
        lineList = None

        with open('shiftedLineBreakPopupMarkupTest.txt', 'r') as file:
            lineList = file.read().splitlines()

        encodedTabbedText = HelpUtil._encodeShiftedLinesWithTabCode(lineList)

        self.assertEqual('''[b][color=ff0000]CryptoPricer full request[/color][/b]

btc usd 0 all

Returns the current price of 1 btc in usd.

[t]The price is an average of the btc quotation on all
[t]the exchanges. It is computed by the crypto prices
[t]provider.
no tab line
[t][n]* new tabbed line
[t][n]* other tabbed line
[t][n]* last tabbed line


[b][color=ff0000]Next section[/color][/b]

This section explains the preceeding section''', encodedTabbedText)
Esempio n. 7
0
    def test_splitTabbedLineContainingMarkupsToShorterTabbedLines(self):
        text = '[t][b][color=ffff00ff]<options>[/color][/b] options are specified using [b][color=ffff00ff]-[/color][/b], like [b][color=ffff00ff]-v[/color][/b] or [b][color=ffff00ff]-f[/color][/b]. More details below'

        width = 54
        list = HelpUtil._splitTabbedLineToShorterTabbedLines(text, width)
        self.assertEqual(2, len(list))
        self.assertEqual('[t][b][color=ffff00ff]<options>[/color][/b] options are specified using [b][color=ffff00ff]-[/color][/b], like [b][color=ffff00ff]-v[/color][/b]', list[0])
        self.assertEqual('[t]or [b][color=ffff00ff]-f[/color][/b]. More details below', list[1])
Esempio n. 8
0
    def test_splitLongLineToShorterLinesTwoWordsNoteLenEqualsMaxNoteLineLen(self):
        note = '12345678911234 567892123456789'
        maxNoteLineLen = 30

        multilineNote = HelpUtil._splitLongLineToShorterLines(note, maxNoteLineLen)

        self.assertEqual(len(multilineNote), 1)
        self.assertEqual(multilineNote[0], '12345678911234 567892123456789')
Esempio n. 9
0
    def test_splitLongLineToShorterLines(self):
        note = 'a long class description. Which occupies several lines.'
        maxNoteLineLen = 30

        multilineNote = HelpUtil._splitLongLineToShorterLines(note, maxNoteLineLen)

        self.assertEqual(len(multilineNote), 2)
        self.assertEqual(multilineNote[0], 'a long class description.')
        self.assertEqual(multilineNote[1], 'Which occupies several lines.')
Esempio n. 10
0
    def test_splitLongLineToShorterLinesTwoWordsFirstAndSecondEqualsMaxLenPlusOne(self):
        note = '1234567891123456789212345678931 1234567891123456789212345678931'
        maxNoteLineLen = 30

        multilineNote = HelpUtil._splitLongLineToShorterLines(note, maxNoteLineLen)

        self.assertEqual(len(multilineNote), 2)
        self.assertEqual(multilineNote[0], '1234567891123456789212345678931')
        self.assertEqual(multilineNote[1], '1234567891123456789212345678931')
Esempio n. 11
0
    def test_splitLongLineToShorterLinesLargeNote(self):
        note = 'ERROR - :seqdiag_loop_start tag located on line 53 of file containing class ClassLoopTagOnMethodNotInRecordFlow is placed on an instruction calling method doC4NotRecordedInFlow() which is not part of the execution flow recorded by HelpUtil.'
        maxNoteLineLen = 150

        multilineNote = HelpUtil._splitLongLineToShorterLines(note, maxNoteLineLen)

        self.assertEqual(len(multilineNote), 2)
        self.assertEqual(multilineNote[0], 'ERROR - :seqdiag_loop_start tag located on line 53 of file containing class ClassLoopTagOnMethodNotInRecordFlow is placed on an instruction calling')
        self.assertEqual(multilineNote[1], 'method doC4NotRecordedInFlow() which is not part of the execution flow recorded by HelpUtil.')
Esempio n. 12
0
    def test_removeEOLOnShiftedLinesContainingLineBreakCodeOnAllShiftedLinesFromFile(self):
        '''
        Tests correct handling of shifted lines containing a forced line break.
        :return:
        '''
        noEOLText = ''
        FILE_PATH = 'shifted_breaked_lines.txt'

        with open(FILE_PATH) as breakedLineFile:
            noEOLText = HelpUtil._removeEOLFromFile(breakedLineFile)

        self.assertEqual('''    [n]R = RT     [n]M = Minute price (precision at the minute)
[p]
    [n]C = Close price''', noEOLText)
Esempio n. 13
0
    def test_removeEOLFromFile(self):
        noEOLText = ''
        FILE_PATH = 'partial_help_breaked_lines.txt'

        with open(FILE_PATH) as breakedLineFile:
            noEOLText = HelpUtil._removeEOLFromFile(breakedLineFile)

        self.assertEqual('''[b][cr]Requesting RT and historical cryptocurrency prices[/b][/c]

CryptoPricer supports two kinds of requests: full requests and partial requests.

[b]Full request[/b]

<crypto> <unit> <date time> <exchange> <options>

<date time> possible values:

    [b][cy]0[/cy][/b] for RT

    [b][cy]21/12 or 21/12/19 or 21/12/2019[/c][/b]. If no year is specified, current year is assumed. If no time is specified, current time is assumed.

    [b][cy]21/12 8:34[/c][/b] --> current year assumed

    21 8:34 --> here, since no month is specified, current month or previous month is assumed.

    8:34 --> here, since no date is specified, current date is assumed.

[b]WARNING[/b]: specifying time makes sense only for dates not older than 7 days. Prices older than 7 days are 'close' prices. Since there is no notion of a close price for crypto's, the last price of the date at UTC 23.59 is returned as 'close' price.
[p]
[b]Output price qualifiers[/b]:

    R = RT     [n]M = Minute price (precision at the minute)     [n]C = Close price

Examples: assume we are on 16/12/17 at 22:10

[cy]btc usd 0 bittrex[/c] --> [n]BTC/USD on BitTrex: 16/12/17 22:10R 19120

[cy]eth btc 16/12 13:45 bitfinex[/c] --> [n]ETH/BTC on Bitfinex: 16/12/17 13:45M 0.03893

[cy]eth btc 13:45 bitfinex[/c] --> [n]ETH/BTC on Bitfinex: 16/12/17 13:45M 0.03893

[cy]eth btc 15 8:45 bitfinex[/c] --> [n]ETH/BTC on Bitfinex: 15/12/17 8:45M 0.03782

[cy]eth btc 21/1 13:45 bitfinex[/c] --> [n]ETH/BTC on Bitfinex: 21/01/17C 0.01185

[cy]btc usd 0 bittrex -v0.01btc[/c] --> [n]0.01 BTC/191.2 USD on BitTrex: 16/12/17 22:10R 19120

[b][cr]WARNING[/c][/b]: <options> must be specified at the end of the full command price''', noEOLText)
Esempio n. 14
0
 def test_getListOfParagraphsSizedForKivyLabel(self):
     text = 'CryptoPricer full request\n\n\nbtc usd 0 all\n\n\nReturns the current price of 1 btc in usd.\n\nThe price is an average of the btc quotation on all the exchanges. It is computed by the crypto prices provider.\n\n\n\nNext section\n\n\nThis section explains the preceeding section'
     width = 60
     list = HelpUtil._getListOfParagraphsSizedForKivyLabel(text, width)
     self.assertEqual(len(list), 11)
     self.assertEqual(list[0],'CryptoPricer full request')
     self.assertEqual(list[1],'\n\n')
     self.assertEqual(list[2],'btc usd 0 all')
     self.assertEqual(list[3],'\n\n')
     self.assertEqual(list[4],'Returns the current price of 1 btc in usd.')
     self.assertEqual(list[5],'\n')
     self.assertEqual(list[6],'The price is an average of the btc quotation on all the exchanges. It is computed by the crypto prices provider.')
     self.assertEqual(list[7],'\n\n\n')
     self.assertEqual(list[8],'Next section')
     self.assertEqual(list[9],'\n\n')
     self.assertEqual(list[10],'This section explains the preceeding section')
Esempio n. 15
0
    def testSizeParagraphsForKivyLabelnRealPartialWithNoBreakLinesHelpFile(self):
        '''
        This test ensures that text resizing for the Kivy label destination works
        on a help file where the not shifted long lines do not include any break.
        '''
        FILE_PATH = 'partial_help_nobreaked_lines.txt'
        resizedTextPageList = ''
        width = 54

        with open(FILE_PATH) as file:
            resizedTextPageList = HelpUtil.sizeParagraphsForKivyLabelFromFile(file, width)

        self.assertEqual('''
[b][color=ff0000]Requesting RT and historical cryptocurrency prices[/b][/color]

CryptoPricer supports two kinds of requests: full requests and partial requests.

[b]Full request[/b]

<crypto> <unit> <date time> <exchange> <options>

<date time> possible values:

    [b][color=ffff00ff]0[/color][/b] for RT

    [b][color=ffff00ff]21/12 or 21/12/19 or 21/12/2019[/color][/b]. If no year is
    specified, current year is assumed. If no time is
    specified, current time is assumed.

    [b][color=ffff00ff]21/12 8:34[/color][/b] --> current year assumed

    21 8:34 --> here, since no month is specified,
    current month or previous month is assumed.

    8:34 --> here, since no date is specified, current
    date is assumed.

[b]WARNING[/b]: specifying time makes sense only for dates not older than 7 days. Prices older than 7 days are 'close' prices. Since there is no notion of a close price for crypto's, the last price of the date at UTC 23.59 is returned as 'close' price.

[b]Output price qualifiers[/b]:

    R = RT

    M = Minute price (precision at the minute)

    C = Close price''', resizedTextPageList[0])
Esempio n. 16
0
    def test_decodeMarkups(self):
        text = '[b][color=ff0000]CryptoPricer full request[/color][/b]\n\nbtc usd 0 all\n\nReturns the current price of 1 btc in usd.\n\nThe price is an average of the btc quotation on all the exchanges. It is computed by the crypto prices provider.\n\n\n\n[b][color=ff0000]Next section[/color][/b]\n\nThis section explains the preceeding section'
        width = 54
        resizedText = HelpUtil._decodeMarkups(text)
        self.assertEqual('''[b][color=ff0000]CryptoPricer full request[/color][/b]

btc usd 0 all

Returns the current price of 1 btc in usd.

The price is an average of the btc quotation on all the exchanges. It is computed by the crypto prices provider.



[b][color=ff0000]Next section[/color][/b]

This section explains the preceeding section''',resizedText)
Esempio n. 17
0
    def test_sizeParagraphsForKivyLabelWithMarkup(self):
        text = '[b]CryptoPricer full request[/b]\n\nbtc usd 0 all\n\nReturns the current price of 1 btc in usd.\n\nThe price is an average of the btc quotation on all the exchanges. It is computed by the crypto prices provider.\n\n\n\nNext section\n\nThis section explains the preceeding section'
        width = 54
        resizedText = HelpUtil._sizeParagraphsForKivyLabel(text, width)
        self.assertEqual('''
[b]CryptoPricer full request[/b]

btc usd 0 all

Returns the current price of 1 btc in usd.

The price is an average of the btc quotation on all the exchanges. It is computed by the crypto prices provider.



Next section

This section explains the preceeding section''',resizedText)
Esempio n. 18
0
    def test_sizeParagraphsForKivyLabelnRealPartialNoBreakLinesHelpFile(self):
        FILE_PATH = 'partial_help_nobreaked_lines.txt'
        text = ''

        with open(FILE_PATH) as file:
            text = file.read()

        width = 54
        resizedText = HelpUtil._sizeParagraphsForKivyLabel(text, width)
        #        resizedText = HelpUtil.decodeMarkup(text)
        self.assertEqual('''
[b][color=ff0000]Requesting RT and historical cryptocurrency prices[/b][/color]

CryptoPricer supports two kinds of requests: full requests and partial requests.

[b]Full request[/b]

<crypto> <unit> <date time> <exchange> <options>

<date time> possible values:

    [b][color=ffff00ff]0[/color][/b] for RT

    [b][color=ffff00ff]21/12 or 21/12/19 or 21/12/2019[/color][/b]. If no year is
    specified, current year is assumed. If no time is
    specified, current time is assumed.

    [b][color=ffff00ff]21/12 8:34[/color][/b] --> current year assumed

    21 8:34 --> here, since no month is specified,
    current month or previous month is assumed.

    8:34 --> here, since no date is specified, current
    date is assumed.

[b]WARNING[/b]: specifying time makes sense only for dates not older than 7 days. Prices older than 7 days are 'close' prices. Since there is no notion of a close price for crypto's, the last price of the date at UTC 23.59 is returned as 'close' price.

[b]Output price qualifiers[/b]:

    R = RT

    M = Minute price (precision at the minute)

    C = Close price''', resizedText)
Esempio n. 19
0
    def test_decodeMarkupsFromFile(self):
        FILE_PATH = 'scrollablePopupMarkupTest.txt'
        text = ''

        with open(FILE_PATH) as markupFile:
            text = markupFile.read()

        width = 54
        resizedText = HelpUtil._decodeMarkups(text)
        self.assertEqual('''[b][color=ff0000]CryptoPricer full request[/color][/b]

btc usd 0 all

Returns the current price of 1 btc in usd.

The price is an average of the btc quotation on all the exchanges. It is computed by the crypto prices provider.



[b][color=ff0000]Next section[/color][/b]

This section explains the preceeding section''',resizedText)
Esempio n. 20
0
    def test_getListOfParagraphsSizedForKivyLabelWithTabCodedParagraph(self):
        text = '[t]a first right shifted paragraph\n\n\n[t]btc usd 0 all\n\n\nReturns the current price of 1 btc in usd.\n\n[t]The price is an average of the btc quotation on all the exchanges. It is computed by the crypto prices provider.\n\n\n\nNext section\n\n\n[t]This section explains the preceeding section'

        width = 30
        list = HelpUtil._getListOfParagraphsSizedForKivyLabel(text, width)
        self.assertEqual(17, len(list))
        self.assertEqual(list[0],'[t]a first right shifted')
        self.assertEqual(list[1],'[t]paragraph')
        self.assertEqual(list[2],'\n\n')
        self.assertEqual(list[3],'[t]btc usd 0 all')
        self.assertEqual(list[4],'\n\n')
        self.assertEqual(list[5],'Returns the current price of 1 btc in usd.')
        self.assertEqual(list[6],'\n')
        self.assertEqual(list[7],'[t]The price is an average of')
        self.assertEqual(list[8],'[t]the btc quotation on all')
        self.assertEqual(list[9],'[t]the exchanges. It is')
        self.assertEqual(list[10],'[t]computed by the crypto')
        self.assertEqual(list[11],'[t]prices provider.')
        self.assertEqual(list[12],'\n\n\n')
        self.assertEqual(list[13],'Next section')
        self.assertEqual(list[14],'\n\n')
        self.assertEqual(list[15],'[t]This section explains the')
        self.assertEqual(list[16],'[t]preceeding section')
Esempio n. 21
0
    def test_sizeParagraphsForKivyLabelWithShiftedParagraphs(self):
        text = '''<date time> possible values:

    [b][cy]0[/cy][/b] for RT

    [b][cy]21/12 or 21/12/19 or 21/12/2019[/c][/b]. If no year is specified, current year is assumed. If no time is specified, current time is assumed.


    [b][cy]21/12 8:34[/c][/b] --> current year assumed'''

        width = 54
        resizedText = HelpUtil._sizeParagraphsForKivyLabel(text, width)
        self.assertEqual('''
<date time> possible values:

    [b][color=ffff00ff]0[/color][/b] for RT

    [b][color=ffff00ff]21/12 or 21/12/19 or 21/12/2019[/color][/b]. If no year is
    specified, current year is assumed. If no time is
    specified, current time is assumed.


    [b][color=ffff00ff]21/12 8:34[/color][/b] --> current year assumed''',resizedText)
Esempio n. 22
0
    def test_splitTextIntoListOfPages(self):
        codedStringWithPageBreak = '''
[b][color=ff0000]Requesting RT and historical cryptocurrency prices[/b][/color]

CryptoPricer supports two kinds of requests: full requests and partial requests.

[b]Full request[/b]

<crypto> <unit> <date time> <exchange> <options>
[p]
<date time> possible values:

    [b][color=ffff00ff]0[/color][/b] for RT

    [b][color=ffff00ff]21/12 or 21/12/19 or 21/12/2019[/color][/b]. If no year is
    specified, current year is assumed. If no time is
    specified, current time is assumed.

    [b][color=ffff00ff]21/12 8:34[/color][/b] --> current year assumed

    21 8:34 --> here, since no month is specified,
    current month or previous month is assumed.

    8:34 --> here, since no date is specified, current
    date is assumed.

[b]WARNING[/b]: specifying time makes sense only for dates not older than 7 days. Prices older than 7 days are 'close' prices. Since there is no notion of a close price for crypto's, the last price of the date at UTC 23.59 is returned as 'close' price.
[p]
[b]Output price qualifiers[/b]:

    R = RT

    M = Minute price (precision at the minute)

    C = Close price'''

        pageList = HelpUtil._splitTextIntoListOfPages(codedStringWithPageBreak)

        self.assertEqual(3, len(pageList))

        self.assertEqual('''
[b][color=ff0000]Requesting RT and historical cryptocurrency prices[/b][/color]

CryptoPricer supports two kinds of requests: full requests and partial requests.

[b]Full request[/b]

<crypto> <unit> <date time> <exchange> <options>
''', pageList[0])

        self.assertEqual('''
<date time> possible values:

    [b][color=ffff00ff]0[/color][/b] for RT

    [b][color=ffff00ff]21/12 or 21/12/19 or 21/12/2019[/color][/b]. If no year is
    specified, current year is assumed. If no time is
    specified, current time is assumed.

    [b][color=ffff00ff]21/12 8:34[/color][/b] --> current year assumed

    21 8:34 --> here, since no month is specified,
    current month or previous month is assumed.

    8:34 --> here, since no date is specified, current
    date is assumed.

[b]WARNING[/b]: specifying time makes sense only for dates not older than 7 days. Prices older than 7 days are 'close' prices. Since there is no notion of a close price for crypto's, the last price of the date at UTC 23.59 is returned as 'close' price.
''', pageList[1])

        self.assertEqual('''
[b]Output price qualifiers[/b]:

    R = RT

    M = Minute price (precision at the minute)

    C = Close price''', pageList[2])
Esempio n. 23
0
    def test_decodeForcedBreakLineAfterEOL(self):
        codedString = '\n[n]text to put on nxt line'

        self.assertEqual('''
text to put on nxt line''', HelpUtil._decodeForcedLineBreak(codedString))
Esempio n. 24
0
    def test_getListOfOriginalSizeParagraphsWithExclamationPoint(self):
        text = '[b][color=ff0000]IMPORTANT[/color][/b]: entering a full request wipes out all the previously entered partial request settings !'

        list = HelpUtil._getListOfOriginalSizeParagraphs(text)
        self.assertEqual(len(list), 1)
        self.assertEqual('[b][color=ff0000]IMPORTANT[/color][/b]: entering a full request wipes out all the previously entered partial request settings !', list[0])
Esempio n. 25
0
    def testSizeParagraphsForKivyLabelnRealPartialWithBreakLinesHelpFile(self):
        '''
        This test ensures that text resizing for the Kivy label destination works
        on a help file where the not shifted long lines are sized for better reading
        at help write time.
        '''
        FILE_PATH = 'partial_help_breaked_lines.txt'
        resizedTextPageList = ''
        width = 54

        with open(FILE_PATH) as file:
            resizedTextPageList = HelpUtil.sizeParagraphsForKivyLabelFromFile(file, width)

        self.assertEqual('''
[b][color=ff0000]Requesting RT and historical cryptocurrency prices[/b][/color]

CryptoPricer supports two kinds of requests: full requests and partial requests.

[b]Full request[/b]

<crypto> <unit> <date time> <exchange> <options>

<date time> possible values:

    [b][color=ffff00ff]0[/color][/b] for RT

    [b][color=ffff00ff]21/12 or 21/12/19 or 21/12/2019[/color][/b]. If no year is
    specified, current year is assumed. If no time is
    specified, current time is assumed.

    [b][color=ffff00ff]21/12 8:34[/color][/b] --> current year assumed

    21 8:34 --> here, since no month is specified,
    current month or previous month is assumed.

    8:34 --> here, since no date is specified, current
    date is assumed.

[b]WARNING[/b]: specifying time makes sense only for dates not older than 7 days. Prices older than 7 days are 'close' prices. Since there is no notion of a close price for crypto's, the last price of the date at UTC 23.59 is returned as 'close' price.
''', resizedTextPageList[0])

        self.assertEqual('''
[b]Output price qualifiers[/b]:

    R = RT
    M = Minute price (precision at the minute)
    C = Close price

Examples: assume we are on 16/12/17 at 22:10

[color=ffff00ff]btc usd 0 bittrex[/color] -->
BTC/USD on BitTrex: 16/12/17 22:10R 19120

[color=ffff00ff]eth btc 16/12 13:45 bitfinex[/color] -->
ETH/BTC on Bitfinex: 16/12/17 13:45M 0.03893

[color=ffff00ff]eth btc 13:45 bitfinex[/color] -->
ETH/BTC on Bitfinex: 16/12/17 13:45M 0.03893

[color=ffff00ff]eth btc 15 8:45 bitfinex[/color] -->
ETH/BTC on Bitfinex: 15/12/17 8:45M 0.03782

[color=ffff00ff]eth btc 21/1 13:45 bitfinex[/color] -->
ETH/BTC on Bitfinex: 21/01/17C 0.01185

[color=ffff00ff]btc usd 0 bittrex -v0.01btc[/color] -->
0.01 BTC/191.2 USD on BitTrex: 16/12/17 22:10R 19120

[b][color=ff0000]WARNING[/color][/b]: <options> must be specified at the end of the full command price''',
                     resizedTextPageList[1])