Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 980d8bea authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #6264 from thundernest/convert_to_kotlin

Convert `BoundaryGenerator` to Kotlin
parents b624f422 2c228567
Loading
Loading
Loading
Loading
+0 −43
Original line number Diff line number Diff line
package com.fsck.k9.mail;


import java.util.Random;

import org.jetbrains.annotations.VisibleForTesting;


public class BoundaryGenerator {
    private static final BoundaryGenerator INSTANCE = new BoundaryGenerator(new Random());
    
    private static final int BOUNDARY_CHARACTER_COUNT = 30;
    private static final char[] BASE36_MAP = {
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
            'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
            'U', 'V', 'W', 'X', 'Y', 'Z'
    };


    private final Random random;


    public static BoundaryGenerator getInstance() {
        return INSTANCE;
    }

    @VisibleForTesting
    BoundaryGenerator(Random random) {
        this.random = random;
    }

    public String generateBoundary() {
        StringBuilder builder = new StringBuilder(4 + BOUNDARY_CHARACTER_COUNT);
        builder.append("----");
        
        for (int i = 0; i < BOUNDARY_CHARACTER_COUNT; i++) {
            builder.append(BASE36_MAP[random.nextInt(36)]);
        }
        
        return builder.toString();
    }
}
+33 −0
Original line number Diff line number Diff line
package com.fsck.k9.mail

import java.util.Random
import org.jetbrains.annotations.VisibleForTesting

class BoundaryGenerator @VisibleForTesting internal constructor(private val random: Random) {

    fun generateBoundary(): String {
        return buildString(4 + BOUNDARY_CHARACTER_COUNT) {
            append("----")

            repeat(BOUNDARY_CHARACTER_COUNT) {
                append(BASE36_MAP[random.nextInt(36)])
            }
        }
    }

    companion object {
        private const val BOUNDARY_CHARACTER_COUNT = 30

        private val BASE36_MAP = charArrayOf(
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
            'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
            'U', 'V', 'W', 'X', 'Y', 'Z'
        )

        private val INSTANCE = BoundaryGenerator(Random())

        @JvmStatic
        fun getInstance() = INSTANCE
    }
}
+0 −46
Original line number Diff line number Diff line
package com.fsck.k9.mail;


import java.util.Random;

import org.junit.Test;
import org.mockito.stubbing.OngoingStubbing;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;


public class BoundaryGeneratorTest {
    @Test
    public void generateBoundary_allZeros() throws Exception {
        Random random = createRandom(0);
        BoundaryGenerator boundaryGenerator = new BoundaryGenerator(random);

        String result = boundaryGenerator.generateBoundary();

        assertEquals("----000000000000000000000000000000", result);
    }

    @Test
    public void generateBoundary() throws Exception {
        Random random = createRandom(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
                23, 24, 25, 26, 27, 28, 35);
        BoundaryGenerator boundaryGenerator = new BoundaryGenerator(random);

        String result = boundaryGenerator.generateBoundary();

        assertEquals("----0123456789ABCDEFGHIJKLMNOPQRSZ", result);
    }

    private Random createRandom(int... values) {
        Random random = mock(Random.class);
        
        OngoingStubbing<Integer> ongoingStubbing = when(random.nextInt(36));
        for (int value : values) {
            ongoingStubbing = ongoingStubbing.thenReturn(value);
        }
        
        return random;
    }
}
+39 −0
Original line number Diff line number Diff line
package com.fsck.k9.mail

import com.google.common.truth.Truth.assertThat
import java.util.Random
import org.junit.Test
import org.mockito.kotlin.mock

class BoundaryGeneratorTest {
    @Test
    fun `generateBoundary() with all zeros`() {
        val random = createRandom(0)
        val boundaryGenerator = BoundaryGenerator(random)

        val result = boundaryGenerator.generateBoundary()

        assertThat(result).isEqualTo("----000000000000000000000000000000")
    }

    @Test
    fun generateBoundary() {
        val random = createRandom(
            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 35
        )
        val boundaryGenerator = BoundaryGenerator(random)

        val result = boundaryGenerator.generateBoundary()

        assertThat(result).isEqualTo("----0123456789ABCDEFGHIJKLMNOPQRSZ")
    }

    private fun createRandom(vararg values: Int): Random {
        return mock {
            var ongoingStubbing = on { nextInt(36) }
            for (value in values) {
                ongoingStubbing = ongoingStubbing.thenReturn(value)
            }
        }
    }
}