Skip to content

Commit

Permalink
Convert BaseBrick to kotlin (#239)
Browse files Browse the repository at this point in the history
Fixes #235
  • Loading branch information
thusson13 authored Feb 8, 2021
1 parent 2eface1 commit f67d4b2
Show file tree
Hide file tree
Showing 12 changed files with 315 additions and 360 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ class TextBrick(
private val text: CharSequence
) : BaseBrick(spanSize, brickPaddingFactory.getInnerOuterBrickPadding(R.dimen.four_dp, R.dimen.eight_dp)) {

override fun onBindData(viewHolder: BrickViewHolder) {
val editTextViewHolder = viewHolder as TextViewHolder
editTextViewHolder.textView.text = text
override fun onBindData(holder: BrickViewHolder) {
val viewHolder = holder as TextViewHolder
viewHolder.textView.text = text
}

override fun getLayout(): Int = R.layout.text_brick
override val layout = R.layout.text_brick

override fun createViewHolder(itemView: View): BrickViewHolder = TextViewHolder(itemView)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.annotation.ColorRes
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import com.wayfair.brickkit.brick.BaseBrick
import com.wayfair.brickkit.padding.ZeroBrickPadding
import com.wayfair.brickkit.size.HalfWidthBrickSize
import com.wayfair.brickkit.viewholder.BrickViewHolder
import com.wayfair.brickkitdemo.R
Expand All @@ -22,7 +23,7 @@ class FragmentBrick(
private val fragmentManager: FragmentManager,
private val fragment: Fragment,
@ColorRes private val backgroundColor: Int
) : BaseBrick(HalfWidthBrickSize()) {
) : BaseBrick(HalfWidthBrickSize(), ZeroBrickPadding()) {

override fun onBindData(holder: BrickViewHolder) {
val viewHolder = holder as FragmentBrickViewHolder
Expand All @@ -42,7 +43,7 @@ class FragmentBrick(
viewHolder.frameLayout.addView(view)
}

override fun getLayout(): Int = R.layout.fragment_brick
override val layout = R.layout.fragment_brick

override fun createViewHolder(itemView: View): BrickViewHolder = FragmentBrickViewHolder(itemView)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,20 @@ class ActiveBrick(
refreshItem()
}

override fun onBindData(viewHolder: BrickViewHolder) {
val holder = viewHolder as ActiveBrickHolder
holder.textView.text = text
holder.itemView.setOnClickListener { onTouch.invoke() }
override fun onBindData(holder: BrickViewHolder) {
val viewHolder = holder as ActiveBrickHolder
viewHolder.textView.text = text
viewHolder.itemView.setOnClickListener { onTouch.invoke() }
}

override fun getLayout(): Int = R.layout.active_brick
override val layout: Int = R.layout.active_brick

override fun getPlaceholderLayout(): Int = R.layout.active_brick_placeholder
override val placeholderLayout = R.layout.active_brick_placeholder

override fun createViewHolder(itemView: View): BrickViewHolder = ActiveBrickHolder(itemView)

override fun isDataReady(): Boolean = text.isNotEmpty()
override val isDataReady
get() = text.isNotEmpty()

/**
* [BrickViewHolder] for ActiveBrick.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class PassiveBrick(

override fun onBindData(holder: BrickViewHolder) = Unit

override fun getLayout(): Int = R.layout.passive_brick
override val layout = R.layout.passive_brick

override fun createViewHolder(itemView: View): BrickViewHolder = BrickViewHolder(itemView)
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import com.nhaarman.mockitokotlin2.reset
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.verifyZeroInteractions
import com.wayfair.brickkit.brick.BaseBrick
import com.wayfair.brickkit.padding.ZeroBrickPadding
import com.wayfair.brickkit.size.FullWidthBrickSize
import com.wayfair.brickkit.viewholder.BrickViewHolder
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotEquals
Expand Down Expand Up @@ -871,18 +873,17 @@ class BrickDataManagerTest {
}
}

open class TestBrick : BaseBrick() {
override fun getLayout() = 1
open class TestBrick : BaseBrick(FullWidthBrickSize(), ZeroBrickPadding()) {
override val layout = 1
override fun onBindData(holder: BrickViewHolder) = Unit
override fun createViewHolder(itemView: View) = null
override fun createViewHolder(itemView: View) = BrickViewHolder(itemView)
}

class TestPlaceholderBrick(private val isDataReady: Boolean) : BaseBrick() {
override fun isDataReady() = isDataReady
override fun getPlaceholderLayout() = 1
class TestPlaceholderBrick(override val isDataReady: Boolean) : BaseBrick(FullWidthBrickSize(), ZeroBrickPadding()) {
override val placeholderLayout = 1
override fun onBindData(holder: BrickViewHolder) = Unit
override fun getLayout() = 0
override fun createViewHolder(itemView: View) = null
override val layout = 0
override fun createViewHolder(itemView: View) = BrickViewHolder(itemView)
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,41 +1,145 @@
/*
* Copyright © 2017-2020 Wayfair. All rights reserved.
* Copyright © 2017-2021 Wayfair. All rights reserved.
*/
package com.wayfair.brickkit.brick

import android.view.View
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.never
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import com.nhaarman.mockitokotlin2.verifyZeroInteractions
import com.wayfair.brickkit.BrickDataManager
import com.wayfair.brickkit.padding.BrickPadding
import com.wayfair.brickkit.size.BrickSize
import com.wayfair.brickkit.viewholder.BrickViewHolder
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import java.lang.UnsupportedOperationException

class BaseBrickTest {
private val brickSize: BrickSize = mock()
private val brickDataManager: BrickDataManager = mock()
private val brick: BaseBrick = TestBaseBrick(brickSize)

@Test
fun testBrickSizeBrickPaddingConstructor() {
val padding = mock<BrickPadding>()
whenever(padding.innerBottomPadding).thenReturn(PADDING)

val brick = TestBaseBrick(brickSize, padding)
assertEquals(brickSize, brick.spanSize)
assertEquals(PADDING, brick.padding.innerBottomPadding)
private val brick: BaseBrick = object : BaseBrick(mock(), mock()) {
override fun onBindData(holder: BrickViewHolder) {}
override val layout = LAYOUT
override fun createViewHolder(itemView: View): BrickViewHolder = mock()
}

@Test
fun testHidden() {
brick.setDataManager(brickDataManager)
brick.setDataManager(null)

assertFalse(brick.isHidden)

brick.isHidden = true
assertTrue(brick.isHidden)

brick.isHidden = false
assertFalse(brick.isHidden)

verifyZeroInteractions(brickDataManager)
}

@Test
fun testHidden_falseToTrue() {
brick.isHidden = false
brick.setDataManager(brickDataManager)

brick.isHidden = true
assertTrue(brick.isHidden)
verify(brickDataManager).hideItem(brick)
}

@Test
fun testHidden_falseToFalse() {
brick.isHidden = false
brick.setDataManager(brickDataManager)

brick.isHidden = true
assertTrue(brick.isHidden)
verify(brickDataManager, never()).showItem(brick)
}

@Test
fun testTag_nullDataManager() {
brick.setDataManager(brickDataManager)
brick.setDataManager(null)

brick.tag = null
brick.tag = TAG_1
brick.tag = TAG_2
brick.tag = null

verifyZeroInteractions(brickDataManager)
}

@Test
fun testTag_notNullToNotNull() {
brick.tag = TAG_1

brick.setDataManager(brickDataManager)

brick.tag = TAG_2

verify(brickDataManager).removeFromTagCache(brick)
verify(brickDataManager).addToTagCache(brick)
}

@Test
fun testTag_nullToNotNull() {
brick.tag = null

brick.setDataManager(brickDataManager)

brick.tag = TAG_2

verify(brickDataManager, never()).removeFromTagCache(brick)
verify(brickDataManager).addToTagCache(brick)
}

@Test
fun testTag_notNullToNull() {
brick.tag = TAG_1

brick.setDataManager(brickDataManager)

brick.tag = null

verify(brickDataManager).removeFromTagCache(brick)
verify(brickDataManager, never()).addToTagCache(brick)
}

@Test
fun testTag_nullToNull() {
brick.tag = null

brick.setDataManager(brickDataManager)

brick.tag = null

verifyZeroInteractions(brickDataManager)
}

@Test
fun testTag_sameTag() {
brick.tag = TAG_1

brick.setDataManager(brickDataManager)

brick.tag = TAG_1

verifyZeroInteractions(brickDataManager)
}

@Test
fun testLayout() {
assertEquals(LAYOUT, brick.layout)
}

@Test(expected = UnsupportedOperationException::class)
fun testPlaceholderLayout() {
brick.placeholderLayout
}

@Test
Expand Down Expand Up @@ -89,16 +193,9 @@ class BaseBrickTest {
verify(brickDataManager).addFirst(brick)
}

private class TestBaseBrick : BaseBrick {
constructor(spanSize: BrickSize, padding: BrickPadding) : super(spanSize, padding)
constructor(spanSize: BrickSize) : super(spanSize)

override fun onBindData(holder: BrickViewHolder) {}
override fun getLayout(): Int = 0
override fun createViewHolder(itemView: View): BrickViewHolder = mock()
}

companion object {
private const val PADDING = 3
private const val LAYOUT = 1234
private const val TAG_1 = "tag 1"
private const val TAG_2 = "tag 2"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import com.nhaarman.mockitokotlin2.any
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.whenever
import com.wayfair.brickkit.BrickRecyclerAdapter
import com.wayfair.brickkit.brick.BaseBrick
import com.wayfair.brickkit.test.R
import com.wayfair.brickkit.viewholder.BrickViewHolder
Expand Down Expand Up @@ -44,7 +45,7 @@ class BrickViewHolderFactoryTest {

@Test
fun testCreateBrickViewHolder_defaultResId() {
assertTrue(factory.createBrickViewHolder(parentView, BaseBrick.DEFAULT_LAYOUT_RES_ID, provider) is EmptyBrickViewHolder)
assertTrue(factory.createBrickViewHolder(parentView, BrickRecyclerAdapter.DEFAULT_LAYOUT_RES_ID, provider) is EmptyBrickViewHolder)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ internal class BrickRecyclerAdapter(
override fun getItemViewType(position: Int): Int {
val brick: BaseBrick? = brickDataManager.brickAtPosition(position)
return when {
brick == null -> BaseBrick.DEFAULT_LAYOUT_RES_ID
brick == null -> DEFAULT_LAYOUT_RES_ID
brick.isDataReady -> brick.layout
else -> brick.placeholderLayout
}
Expand All @@ -205,5 +205,6 @@ internal class BrickRecyclerAdapter(

companion object {
private val TAG = BrickRecyclerAdapter::class.java.name
const val DEFAULT_LAYOUT_RES_ID = 0
}
}
Loading

0 comments on commit f67d4b2

Please sign in to comment.