Skip to content
Snippets Groups Projects
Commit f97e28c2 authored by John Carlson's avatar John Carlson
Browse files

Begin to form GitLab markdown parser

parent 3187f690
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 234 additions and 348 deletions
Loading
Loading
@@ -12,7 +12,6 @@ import android.support.design.widget.Snackbar
import android.support.v7.widget.Toolbar
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import butterknife.OnClick
Loading
Loading
@@ -52,7 +51,6 @@ class AboutActivity : BaseActivity() {
 
@BindView(R.id.root) lateinit var root: ViewGroup
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar
@BindView(R.id.contributors) lateinit var textContributors: TextView
@BindView(R.id.physics_layout) lateinit var physicsLayout: PhysicsFlowLayout
@BindView(R.id.progress) lateinit var progress: View
 
Loading
Loading
Loading
Loading
@@ -20,7 +20,7 @@ import com.commit451.addendum.parceler.getParcelerParcelableExtra
import com.commit451.addendum.parceler.putParcelerParcelableExtra
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.adapter.BuildSectionsPagerAdapter
import com.commit451.gitlab.adapter.BuildPagerAdapter
import com.commit451.gitlab.event.BuildChangedEvent
import com.commit451.gitlab.extension.getDownloadBuildUrl
import com.commit451.gitlab.model.api.Build
Loading
Loading
@@ -177,7 +177,7 @@ class BuildActivity : BaseActivity() {
}
 
private fun setupTabs() {
val sectionsPagerAdapter = BuildSectionsPagerAdapter(
val sectionsPagerAdapter = BuildPagerAdapter(
this,
supportFragmentManager,
project,
Loading
Loading
Loading
Loading
@@ -15,7 +15,7 @@ import com.commit451.addendum.parceler.getParcelerParcelableExtra
import com.commit451.addendum.parceler.putParcelerParcelableExtra
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.adapter.PipelineSectionsPagerAdapter
import com.commit451.gitlab.adapter.PipelinePagerAdapter
import com.commit451.gitlab.event.PipelineChangedEvent
import com.commit451.gitlab.model.api.Pipeline
import com.commit451.gitlab.model.api.Project
Loading
Loading
@@ -126,7 +126,7 @@ class PipelineActivity : BaseActivity() {
}
 
private fun setupTabs() {
val sectionsPagerAdapter = PipelineSectionsPagerAdapter(
val sectionsPagerAdapter = PipelinePagerAdapter(
this,
supportFragmentManager,
project,
Loading
Loading
Loading
Loading
@@ -23,7 +23,7 @@ import com.commit451.addendum.parceler.putParcelerParcelableExtra
import com.commit451.alakazam.HideRunnable
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.adapter.ProjectSectionsPagerAdapter
import com.commit451.gitlab.adapter.ProjectPagerAdapter
import com.commit451.gitlab.data.Prefs
import com.commit451.gitlab.event.ProjectReloadEvent
import com.commit451.gitlab.extension.setup
Loading
Loading
@@ -240,7 +240,7 @@ class ProjectActivity : BaseActivity() {
}
 
fun setupTabs() {
val projectSectionsPagerAdapter = ProjectSectionsPagerAdapter(this, supportFragmentManager)
val projectSectionsPagerAdapter = ProjectPagerAdapter(this, supportFragmentManager)
viewPager.adapter = projectSectionsPagerAdapter
tabLayout.setupWithViewPager(viewPager)
}
Loading
Loading
Loading
Loading
@@ -12,7 +12,7 @@ import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.adapter.ProjectPagerAdapter
import com.commit451.gitlab.adapter.ProjectsPagerAdapter
import com.commit451.gitlab.event.CloseDrawerEvent
import com.commit451.gitlab.navigation.Navigator
import org.greenrobot.eventbus.Subscribe
Loading
Loading
@@ -57,7 +57,7 @@ class ProjectsActivity : BaseActivity() {
toolbar.setNavigationOnClickListener { drawerLayout.openDrawer(GravityCompat.START) }
toolbar.inflateMenu(R.menu.search)
toolbar.setOnMenuItemClickListener(onMenuItemClickListener)
viewPager.adapter = ProjectPagerAdapter(this, supportFragmentManager)
viewPager.adapter = ProjectsPagerAdapter(this, supportFragmentManager)
tabLayout.setupWithViewPager(viewPager)
}
 
Loading
Loading
Loading
Loading
@@ -13,7 +13,7 @@ import com.commit451.gitlab.model.api.Project
/**
* Build sections
*/
class BuildSectionsPagerAdapter(context: Context, fm: FragmentManager, private val project: Project, private val build: Build) : FragmentPagerAdapter(fm) {
class BuildPagerAdapter(context: Context, fm: FragmentManager, private val project: Project, private val build: Build) : FragmentPagerAdapter(fm) {
private val titles: Array<String> = context.resources.getStringArray(R.array.build_tabs)
 
override fun getItem(position: Int): Fragment {
Loading
Loading
package com.commit451.gitlab.adapter
import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.ViewGroup
import com.commit451.gitlab.model.api.MergeRequest
import com.commit451.gitlab.model.api.Note
import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder
import com.commit451.gitlab.viewHolder.MergeRequestHeaderViewHolder
import com.commit451.gitlab.viewHolder.NoteViewHolder
import java.util.*
/**
* Shows the comments and details of a merge request
*/
class MergeRequestDetailAdapter(context: Context, private val mergeRequest: MergeRequest, private val project: Project) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
val TYPE_HEADER = 0
val TYPE_COMMENT = 1
val TYPE_FOOTER = 2
val headerCount = 1
val FOOTER_COUNT = 1
}
private val notes: LinkedList<Note> = LinkedList()
private var loading = false
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if (viewType == TYPE_HEADER) {
return MergeRequestHeaderViewHolder.inflate(parent)
} else if (viewType == TYPE_COMMENT) {
return NoteViewHolder.inflate(parent)
} else if (viewType == TYPE_FOOTER) {
return LoadingFooterViewHolder.inflate(parent)
}
throw IllegalArgumentException("No view type matches")
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is MergeRequestHeaderViewHolder) {
holder.bind(mergeRequest, project)
} else if (holder is NoteViewHolder) {
val note = getNoteAt(position)
holder.bind(note, project)
} else if (holder is LoadingFooterViewHolder) {
holder.bind(loading)
}
}
override fun getItemCount(): Int {
return notes.size + headerCount + FOOTER_COUNT
}
override fun getItemViewType(position: Int): Int {
if (isPositionHeader(position)) {
return TYPE_HEADER
} else if (position == headerCount + notes.size) {
return TYPE_FOOTER
} else {
return TYPE_COMMENT
}
}
fun getNoteAt(position: Int): Note {
return notes[position - headerCount]
}
fun addNote(note: Note) {
notes.addFirst(note)
notifyItemInserted(headerCount)
}
fun setNotes(notes: List<Note>) {
this.notes.clear()
addNotes(notes)
}
fun addNotes(notes: List<Note>) {
if (!notes.isEmpty()) {
this.notes.addAll(notes)
}
notifyDataSetChanged()
}
fun setLoading(loading: Boolean) {
this.loading = loading
notifyItemChanged(notes.size + headerCount)
}
private fun isPositionHeader(position: Int): Boolean {
return position == 0
}
}
Loading
Loading
@@ -13,7 +13,7 @@ import com.commit451.gitlab.model.api.MergeRequest
import com.commit451.gitlab.model.api.Project
 
/**
* Projects Pager Adapter
* Merge request pager adapter
*/
class MergeRequestSectionsPagerAdapter(context: Context, fm: FragmentManager, private val project: Project, private val mergeRequest: MergeRequest) : FragmentPagerAdapter(fm) {
private val titles: Array<String> = context.resources.getStringArray(R.array.merge_request_tabs)
Loading
Loading
Loading
Loading
@@ -12,7 +12,7 @@ import com.commit451.gitlab.model.api.Project
/**
* Pipeline sections
*/
class PipelineSectionsPagerAdapter(context: Context, fm: FragmentManager, private val project: Project, private val pipeline: Pipeline) : FragmentPagerAdapter(fm) {
class PipelinePagerAdapter(context: Context, fm: FragmentManager, private val project: Project, private val pipeline: Pipeline) : FragmentPagerAdapter(fm) {
private val titles: Array<String> = context.resources.getStringArray(R.array.pipeline_tabs)
 
override fun getItem(position: Int): Fragment {
Loading
Loading
package com.commit451.gitlab.adapter
 
import android.content.Context
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
import com.commit451.gitlab.R
import com.commit451.gitlab.fragment.ProjectsFragment
import com.commit451.gitlab.activity.ProjectActivity
import com.commit451.gitlab.extension.feedUrl
import com.commit451.gitlab.fragment.*
import com.commit451.gitlab.model.api.Project
import timber.log.Timber
import java.util.*
 
/**
* Projects Pager Adapter
* Controls the sections that should be shown in a [com.commit451.gitlab.activity.ProjectActivity]
*/
class ProjectPagerAdapter(context: Context, fm: FragmentManager) : FragmentPagerAdapter(fm) {
class ProjectPagerAdapter(context: ProjectActivity, fm: FragmentManager) : FragmentPagerAdapter(fm) {
companion object {
val PROJECT_POS = 0
val ACTIVITY_POS = 1
val FILES_POS = 2
val COMMITS_POS = 3
val PIPELINES_POS = 4
val BUILDS_POS = 5
val MILESTONES_POS = 6
val ISSUES_POS = 7
val MERGE_REQUESTS_POS = 8
val PROJECT_MEMBERS_POS = 9
val SNIPPETS_POS = 10
}
private val project: Project = context.project!!
private val titles: Array<String> = context.resources.getStringArray(R.array.main_tabs)
private val disabledSections = HashSet<Int>()
init {
val project = context.project!!
if (isDisabled(project.isBuildEnabled)) {
Timber.d("Builds are disabled")
disabledSections.add(BUILDS_POS)
disabledSections.add(PIPELINES_POS)
}
if (isDisabled(project.isIssuesEnabled)) {
Timber.d("Issues are disabled")
disabledSections.add(ISSUES_POS)
}
if (isDisabled(project.isMergeRequestsEnabled)) {
Timber.d("Merge requests are disabled")
disabledSections.add(MERGE_REQUESTS_POS)
}
if (isDisabled(project.isIssuesEnabled) && isDisabled(project.isMergeRequestsEnabled)) {
Timber.d("Milestones are disabled")
disabledSections.add(MILESTONES_POS)
}
//TODO enable snippets when they are done
if (true) {//!project.isSnippetsEnabled()) {
Timber.d("Snippets are disabled")
disabledSections.add(SNIPPETS_POS)
}
}
override fun getCount(): Int {
return titles.size - disabledSections.size
}
 
private val titles: Array<String> = context.resources.getStringArray(R.array.projects_tabs)
override fun getPageTitle(position: Int): CharSequence {
return titles[getCorrectPosition(position)]
}
 
override fun getItem(position: Int): Fragment {
val correctPosition = getCorrectPosition(position)
 
when (position) {
0 -> return ProjectsFragment.newInstance(ProjectsFragment.MODE_ALL)
1 -> return ProjectsFragment.newInstance(ProjectsFragment.MODE_MINE)
2 -> return ProjectsFragment.newInstance(ProjectsFragment.MODE_STARRED)
when (correctPosition) {
PROJECT_POS -> return ProjectFragment.newInstance()
ACTIVITY_POS -> return FeedFragment.newInstance(project.feedUrl)
FILES_POS -> return FilesFragment.newInstance()
COMMITS_POS -> return CommitsFragment.newInstance()
PIPELINES_POS -> return PipelinesFragment.newInstance()
BUILDS_POS -> return BuildsFragment.newInstance()
MILESTONES_POS -> return MilestonesFragment.newInstance()
ISSUES_POS -> return IssuesFragment.newInstance()
MERGE_REQUESTS_POS -> return MergeRequestsFragment.newInstance()
PROJECT_MEMBERS_POS -> return ProjectMembersFragment.newInstance()
SNIPPETS_POS -> return SnippetsFragment.newInstance()
}
 
throw IllegalStateException("Position exceeded on view pager")
}
 
override fun getCount(): Int {
return titles.size
private fun isDisabled(enabledState: Boolean?) : Boolean{
if (enabledState != null && !enabledState) {
return true
}
return false
}
 
override fun getPageTitle(position: Int): CharSequence {
return titles[position]
private fun getCorrectPosition(position: Int): Int {
var correctPosition = position
for (i in 0..position) {
if (disabledSections.contains(i)) {
correctPosition++
}
}
return correctPosition
}
}
package com.commit451.gitlab.adapter
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
import com.commit451.gitlab.R
import com.commit451.gitlab.activity.ProjectActivity
import com.commit451.gitlab.extension.feedUrl
import com.commit451.gitlab.fragment.*
import com.commit451.gitlab.model.api.Project
import timber.log.Timber
import java.util.*
/**
* Controls the sections that should be shown in a [com.commit451.gitlab.activity.ProjectActivity]
*/
class ProjectSectionsPagerAdapter(context: ProjectActivity, fm: FragmentManager) : FragmentPagerAdapter(fm) {
companion object {
val PROJECT_POS = 0
val ACTIVITY_POS = 1
val FILES_POS = 2
val COMMITS_POS = 3
val PIPELINES_POS = 4
val BUILDS_POS = 5
val MILESTONES_POS = 6
val ISSUES_POS = 7
val MERGE_REQUESTS_POS = 8
val PROJECT_MEMBERS_POS = 9
val SNIPPETS_POS = 10
}
private val project: Project = context.project!!
private val titles: Array<String> = context.resources.getStringArray(R.array.main_tabs)
private val disabledSections = HashSet<Int>()
init {
val project = context.project!!
if (isDisabled(project.isBuildEnabled)) {
Timber.d("Builds are disabled")
disabledSections.add(BUILDS_POS)
disabledSections.add(PIPELINES_POS)
}
if (isDisabled(project.isIssuesEnabled)) {
Timber.d("Issues are disabled")
disabledSections.add(ISSUES_POS)
}
if (isDisabled(project.isMergeRequestsEnabled)) {
Timber.d("Merge requests are disabled")
disabledSections.add(MERGE_REQUESTS_POS)
}
if (isDisabled(project.isIssuesEnabled) && isDisabled(project.isMergeRequestsEnabled)) {
Timber.d("Milestones are disabled")
disabledSections.add(MILESTONES_POS)
}
//TODO enable snippets when they are done
if (true) {//!project.isSnippetsEnabled()) {
Timber.d("Snippets are disabled")
disabledSections.add(SNIPPETS_POS)
}
}
override fun getCount(): Int {
return titles.size - disabledSections.size
}
override fun getPageTitle(position: Int): CharSequence {
return titles[getCorrectPosition(position)]
}
override fun getItem(position: Int): Fragment {
val correctPosition = getCorrectPosition(position)
when (correctPosition) {
PROJECT_POS -> return ProjectFragment.newInstance()
ACTIVITY_POS -> return FeedFragment.newInstance(project.feedUrl)
FILES_POS -> return FilesFragment.newInstance()
COMMITS_POS -> return CommitsFragment.newInstance()
PIPELINES_POS -> return PipelinesFragment.newInstance()
BUILDS_POS -> return BuildsFragment.newInstance()
MILESTONES_POS -> return MilestonesFragment.newInstance()
ISSUES_POS -> return IssuesFragment.newInstance()
MERGE_REQUESTS_POS -> return MergeRequestsFragment.newInstance()
PROJECT_MEMBERS_POS -> return ProjectMembersFragment.newInstance()
SNIPPETS_POS -> return SnippetsFragment.newInstance()
}
throw IllegalStateException("Position exceeded on view pager")
}
private fun isDisabled(enabledState: Boolean?) : Boolean{
if (enabledState != null && !enabledState) {
return true
}
return false
}
private fun getCorrectPosition(position: Int): Int {
var correctPosition = position
for (i in 0..position) {
if (disabledSections.contains(i)) {
correctPosition++
}
}
return correctPosition
}
}
package com.commit451.gitlab.adapter
import android.content.Context
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
import com.commit451.gitlab.R
import com.commit451.gitlab.fragment.ProjectsFragment
/**
* Projects Pager Adapter
*/
class ProjectsPagerAdapter(context: Context, fm: FragmentManager) : FragmentPagerAdapter(fm) {
private val titles: Array<String> = context.resources.getStringArray(R.array.projects_tabs)
override fun getItem(position: Int): Fragment {
when (position) {
0 -> return ProjectsFragment.newInstance(ProjectsFragment.MODE_ALL)
1 -> return ProjectsFragment.newInstance(ProjectsFragment.MODE_MINE)
2 -> return ProjectsFragment.newInstance(ProjectsFragment.MODE_STARRED)
}
throw IllegalStateException("Position exceeded on view pager")
}
override fun getCount(): Int {
return titles.size
}
override fun getPageTitle(position: Int): CharSequence {
return titles[position]
}
}
Loading
Loading
@@ -18,7 +18,6 @@ import com.commit451.addendum.parceler.putParcelerParcelable
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.activity.AttachActivity
import com.commit451.gitlab.adapter.MergeRequestDetailAdapter
import com.commit451.gitlab.adapter.NotesAdapter
import com.commit451.gitlab.api.response.FileUploadResponse
import com.commit451.gitlab.event.MergeRequestChangedEvent
Loading
Loading
@@ -217,7 +216,7 @@ class MergeRequestDiscussionFragment : ButterKnifeFragment() {
override fun success(note: Note) {
progress.visibility = View.GONE
adapterNotes.addNote(note)
listNotes.smoothScrollToPosition(MergeRequestDetailAdapter.headerCount)
listNotes.smoothScrollToPosition(0)
}
})
}
Loading
Loading
package com.commit451.gitlab.util
import java.util.regex.Pattern
/**
* Parses special GitLab markdown and transforms it into normal markdown links within the app
* [https://gitlab.com/help/user/markdown#special-gitlab-references]
*/
object GitLabMarkdownParser {
private val patternIssue by lazy {
//starts with #, followed by any number of digits
Pattern.compile("#\\d+")
}
private val patternMergeRequest by lazy {
//starts with !, followed by any number of digits
Pattern.compile("!\\d+")
}
private val patternLabel by lazy {
//starts with ~, followed by any number of digits
Pattern.compile("~\\d+")
}
private val patternMilestone by lazy {
//starts with %, followed by any number of digits
Pattern.compile("%\\d+")
}
fun parse(text: String): String {
return parseMilestones(parseLabels(parseMergeRequests(parseIssues(text))))
}
fun parseIssues(text: String): String {
val matcher = patternIssue.matcher(text)
return matcher.replaceAll("hi")
}
fun parseMergeRequests(text: String): String {
val matcher = patternMergeRequest.matcher(text)
return matcher.replaceAll("hi")
}
fun parseLabels(text: String): String {
val matcher = patternLabel.matcher(text)
return matcher.replaceAll("hi")
}
fun parseMilestones(text: String): String {
val matcher = patternMilestone.matcher(text)
return matcher.replaceAll("hi")
}
}
\ No newline at end of file
package com.commit451.gitlab.viewHolder
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.extension.setMarkdownText
import com.commit451.gitlab.model.api.MergeRequest
import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.transformation.CircleTransformation
import com.commit451.gitlab.util.DateUtil
import com.commit451.gitlab.util.ImageUtil
import com.commit451.gitlab.util.InternalLinkMovementMethod
/**
* Header that gives the details of a merge request
*/
class MergeRequestHeaderViewHolder(view: View) : RecyclerView.ViewHolder(view) {
companion object {
fun inflate(parent: ViewGroup): MergeRequestHeaderViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.header_merge_request, parent, false)
return MergeRequestHeaderViewHolder(view)
}
}
@BindView(R.id.description) lateinit var textDescription: TextView
@BindView(R.id.author_image) lateinit var imageAuthor: ImageView
@BindView(R.id.author) lateinit var textAuthor: TextView
init {
ButterKnife.bind(this, view)
}
fun bind(mergeRequest: MergeRequest, project: Project) {
if (mergeRequest.description.isNullOrEmpty()) {
textDescription.visibility = View.GONE
} else {
textDescription.visibility = View.VISIBLE
textDescription.setMarkdownText(mergeRequest.description!!, project)
textDescription.movementMethod = InternalLinkMovementMethod(App.get().getAccount().serverUrl!!)
}
App.get().picasso
.load(ImageUtil.getAvatarUrl(mergeRequest.author, itemView.resources.getDimensionPixelSize(R.dimen.image_size)))
.transform(CircleTransformation())
.into(imageAuthor)
var author = ""
if (mergeRequest.author != null) {
author += mergeRequest.author!!.name + " "
}
author += itemView.resources.getString(R.string.created_merge_request)
if (mergeRequest.createdAt != null) {
author += " " + DateUtil.getRelativeTimeSpanString(itemView.context, mergeRequest.createdAt)
}
textAuthor.text = author
}
}
Loading
Loading
@@ -12,7 +12,7 @@ import com.commit451.addendum.parceler.getParcelerParcelableExtra
import com.commit451.addendum.parceler.putParcelerParcelableExtra
import com.commit451.gitlab.R
import com.commit451.gitlab.activity.BaseActivity
import com.commit451.gitlab.adapter.ProjectPagerAdapter
import com.commit451.gitlab.adapter.ProjectsPagerAdapter
import com.commit451.gitlab.api.GitLabFactory
import com.commit451.gitlab.api.GitLabService
import com.commit451.gitlab.api.OkHttpClientFactory
Loading
Loading
@@ -52,7 +52,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
val account = intent.getParcelerParcelableExtra<Account>(EXTRA_ACCOUNT)!!
gitLabInstance = GitLabFactory.create(account, OkHttpClientFactory.create(account, false).build())
 
viewPager.adapter = ProjectPagerAdapter(this, supportFragmentManager)
viewPager.adapter = ProjectsPagerAdapter(this, supportFragmentManager)
tabLayout.setupWithViewPager(viewPager)
}
 
Loading
Loading
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp"
tools:text="Description"
android:textAppearance="?android:attr/textAppearanceMedium" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="16dp">
<ImageView
android:id="@+id/author_image"
android:layout_width="@dimen/image_size"
android:layout_height="@dimen/image_size"
android:contentDescription="@null"/>
<TextView
android:id="@+id/author"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_normal"
android:layout_marginRight="@dimen/padding_normal"
android:layout_gravity="center_vertical"
tools:text="Jawnnypoo created issue 8 hours ago"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
package com.commit451.gitlab
import com.commit451.gitlab.util.GitLabMarkdownParser
import org.junit.Assert
import org.junit.Test
/**
* Tests custom GitLab markdown parsing
*/
class MarkdownParserTests {
@Test
fun issuesTest() {
val text = "#1 #2 blah blah #3"
val expected = "hi hi blah blah hi"
val parsed = GitLabMarkdownParser.parse(text)
Assert.assertEquals(expected, parsed)
}
@Test
fun mergeRequestTest() {
val text = "!1 !2 blah blah !3"
val expected = "hi hi blah blah hi"
val parsed = GitLabMarkdownParser.parse(text)
Assert.assertEquals(expected, parsed)
}
@Test
fun labelsTest() {
val text = "~1 ~2 blah blah ~3"
val expected = "hi hi blah blah hi"
val parsed = GitLabMarkdownParser.parse(text)
Assert.assertEquals(expected, parsed)
}
@Test
fun milestonesTest() {
val text = "%1 %2 blah blah %3"
val expected = "hi hi blah blah hi"
val parsed = GitLabMarkdownParser.parse(text)
Assert.assertEquals(expected, parsed)
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment