1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.example.text.styling.parser
17 
18 import org.junit.Assert.assertEquals
19 import org.junit.Test
20 
21 /**
22  * Tests for [Parser]
23  */
24 class ParserTest {
25 
quoteBeginningOfTextnull26     @Test fun quoteBeginningOfText() {
27         val withQuote = "> This is a quote.\nThis is not"
28 
29         val elements = Parser.parse(withQuote).elements
30 
31         val expected = listOf(
32                 Element(Element.Type.QUOTE, "This is a quote.\n"),
33                 Element(Element.Type.TEXT, "This is not"))
34         assertEquals(expected, elements)
35     }
36 
quoteEndOfTextnull37     @Test fun quoteEndOfText() {
38         val withQuote = "This is not a quote.\n> This is a quote"
39 
40         val elements = Parser.parse(withQuote).elements
41 
42         val expected = listOf(
43                 Element(Element.Type.TEXT, "This is not a quote.\n"),
44                 Element(Element.Type.QUOTE, "This is a quote"))
45         assertEquals(expected, elements)
46     }
47 
simpleBulletPointsnull48     @Test fun simpleBulletPoints() {
49         val bulletPoints = "Bullet points:\n* One\n+ Two\n* Three"
50 
51         val elements = Parser.parse(bulletPoints).elements
52 
53         assertEquals(elements.size, 4)
54         assertEquals(elements[0].type, Element.Type.TEXT)
55         assertEquals(elements[0].text, "Bullet points:\n")
56         assertEquals(elements[1].type, Element.Type.BULLET_POINT)
57         assertEquals(elements[1].text, "One\n")
58         assertEquals(elements[2].type, Element.Type.BULLET_POINT)
59         assertEquals(elements[2].text, "Two\n")
60         assertEquals(elements[3].type, Element.Type.BULLET_POINT)
61         assertEquals(elements[3].text, "Three")
62     }
63 
simpleCodenull64     @Test fun simpleCode() {
65         val code = "Styling `Text` in `Kotlin`"
66 
67         val elements = Parser.parse(code).elements
68 
69         val expected = listOf(
70                 Element(Element.Type.TEXT, "Styling "),
71                 Element(Element.Type.CODE_BLOCK, "Text"),
72                 Element(Element.Type.TEXT, " in "),
73                 Element(Element.Type.CODE_BLOCK, "Kotlin"))
74         assertEquals(expected, elements)
75     }
76 
codeWithExtraTicknull77     @Test fun codeWithExtraTick() {
78         val code = "Styling `Text` in `Kotlin"
79 
80         val elements = Parser.parse(code).elements
81 
82         val expected = listOf(
83                 Element(Element.Type.TEXT, "Styling "),
84                 Element(Element.Type.CODE_BLOCK, "Text"),
85                 Element(Element.Type.TEXT, " in "),
86                 Element(Element.Type.TEXT, "`Kotlin"))
87         assertEquals(expected, elements)
88     }
89 
quoteBulletPointsCodenull90     @Test fun quoteBulletPointsCode() {
91         val text = "Complex:\n> Quote\nWith points:\n+ bullet `one`\n* bullet `two` is `long`"
92 
93         val elements = Parser.parse(text).elements
94 
95         assertEquals(elements.size, 5)
96         assertEquals(elements[0].type, Element.Type.TEXT)
97         assertEquals(elements[0].text, "Complex:\n")
98         assertEquals(elements[1].type, Element.Type.QUOTE)
99         assertEquals(elements[1].text, "Quote\n")
100         assertEquals(elements[2].type, Element.Type.TEXT)
101         assertEquals(elements[2].text, "With points:\n")
102         // first bullet point
103         assertEquals(elements[3].type, Element.Type.BULLET_POINT)
104         assertEquals(elements[3].text, "bullet `one`\n")
105         val subElements1 = elements[3].elements
106         assertEquals(subElements1.size, 3)
107         assertEquals(subElements1[0].type, Element.Type.TEXT)
108         assertEquals(subElements1[0].text, "bullet ")
109         assertEquals(subElements1[1].type, Element.Type.CODE_BLOCK)
110         assertEquals(subElements1[1].text, "one")
111         assertEquals(subElements1[2].type, Element.Type.TEXT)
112         assertEquals(subElements1[2].text, "\n")
113         // second bullet point
114         assertEquals(elements[4].type, Element.Type.BULLET_POINT)
115         assertEquals(elements[4].text, "bullet `two` is `long`")
116         val subElements2 = elements[4].elements
117         assertEquals(subElements2.size, 4)
118         assertEquals(subElements2[0].type, Element.Type.TEXT)
119         assertEquals(subElements2[0].text, "bullet ")
120         assertEquals(subElements2[1].type, Element.Type.CODE_BLOCK)
121         assertEquals(subElements2[1].text, "two")
122         assertEquals(subElements2[2].type, Element.Type.TEXT)
123         assertEquals(subElements2[2].text, " is ")
124         assertEquals(subElements2[3].type, Element.Type.CODE_BLOCK)
125         assertEquals(subElements2[3].text, "long")
126     }
127 }