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 }