Back to Repositories

Testing TokenUtils CLI Operations in Alibaba Arthas

This test suite validates the TokenUtils functionality in Arthas core, focusing on CLI token manipulation and text token detection methods. The tests ensure reliable token handling for command-line interface operations.

Test Coverage Overview

The test suite provides comprehensive coverage of TokenUtils methods with focus on token manipulation:
  • findFirstTextToken validation across null, empty and populated token lists
  • findLastTextToken verification for edge cases and normal scenarios
  • findSecondTokenText testing for various token combinations
  • Boundary testing with null values and empty collections

Implementation Analysis

The testing approach employs JUnit 4 framework with systematic validation of token handling:
  • Helper method newCliTokenList for consistent test data creation
  • Extensive use of Assert statements for precise validation
  • Structured test methods covering distinct token utility functions
  • Clear separation of test scenarios for each token operation

Technical Details

Testing infrastructure and components:
  • JUnit 4 test framework
  • CliToken and CliTokenImpl implementations
  • Custom token list generation utilities
  • ArrayList and Collections framework usage
  • Null safety validation mechanisms

Best Practices Demonstrated

The test suite exemplifies several testing best practices:
  • Comprehensive edge case coverage including null inputs
  • Consistent test method naming convention
  • Isolated test scenarios for each functionality
  • Clear setup and validation patterns
  • Efficient test data generation through helper methods

alibaba/arthas

core/src/test/java/com/taobao/arthas/core/util/TokenUtilsTest.java

            
package com.taobao.arthas.core.util;

import com.taobao.arthas.core.shell.cli.CliToken;
import com.taobao.arthas.core.shell.cli.impl.CliTokenImpl;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author earayu
 */
public class TokenUtilsTest {

    private List<CliToken> newCliTokenList(CliToken ... tokens){
        List<CliToken> cliTokens = new ArrayList<CliToken>();
        if(tokens!=null) {
            Collections.addAll(cliTokens, tokens);
        }
        return cliTokens;
    }

    @Test
    public void testFindFirstTextToken(){
        CliToken textCliToken = new CliTokenImpl(true,"textCliToken");
        CliToken nonTextCliToken = new CliTokenImpl(false,"nonTextCliToken");

        //null list
        Assert.assertEquals(null, TokenUtils.findFirstTextToken(null));

        //empty list
        Assert.assertEquals(null, TokenUtils.findFirstTextToken(new ArrayList<CliToken>()));

        //list with null value
        Assert.assertEquals(null,
                TokenUtils.findFirstTextToken(newCliTokenList(new CliToken[]{null})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findFirstTextToken(newCliTokenList(new CliToken[]{null, textCliToken})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findFirstTextToken(newCliTokenList(new CliToken[]{null, nonTextCliToken, textCliToken})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findFirstTextToken(newCliTokenList(new CliToken[]{nonTextCliToken, null, textCliToken})));

        //list with normal inputs
        Assert.assertEquals(textCliToken,
                TokenUtils.findFirstTextToken(newCliTokenList(new CliToken[]{textCliToken})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findFirstTextToken(newCliTokenList(new CliToken[]{nonTextCliToken, textCliToken})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findFirstTextToken(newCliTokenList(new CliToken[]{textCliToken, nonTextCliToken})));

    }



    @Test
    public void testFindLastTextToken(){
        CliToken textCliToken = new CliTokenImpl(true,"textCliToken");
        CliToken nonTextCliToken = new CliTokenImpl(false,"nonTextCliToken");

        //null list
        Assert.assertEquals(null, TokenUtils.findLastTextToken(null));

        //empty list
        Assert.assertEquals(null, TokenUtils.findLastTextToken(new ArrayList<CliToken>()));

        //list with null value
        Assert.assertEquals(null,
                TokenUtils.findLastTextToken(newCliTokenList(new CliToken[]{null})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findLastTextToken(newCliTokenList(new CliToken[]{null, textCliToken})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findLastTextToken(newCliTokenList(new CliToken[]{null, nonTextCliToken, textCliToken})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findLastTextToken(newCliTokenList(new CliToken[]{nonTextCliToken, null, textCliToken})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findLastTextToken(newCliTokenList(new CliToken[]{textCliToken, null, nonTextCliToken})));

        //list with normal inputs
        Assert.assertEquals(textCliToken,
                TokenUtils.findLastTextToken(newCliTokenList(new CliToken[]{textCliToken})));
        Assert.assertEquals(null,
                TokenUtils.findLastTextToken(newCliTokenList(new CliToken[]{nonTextCliToken})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findLastTextToken(newCliTokenList(new CliToken[]{nonTextCliToken, textCliToken})));
        Assert.assertEquals(textCliToken,
                TokenUtils.findLastTextToken(newCliTokenList(new CliToken[]{textCliToken, nonTextCliToken})));

    }


    @Test
    public void testFindSecondTextToken(){
        CliToken textCliToken = new CliTokenImpl(true,"textCliToken");
        CliToken nonTextCliToken = new CliTokenImpl(false,"nonTextCliToken");

        //null list
        Assert.assertEquals(null, TokenUtils.findSecondTokenText(null));

        //empty list
        Assert.assertEquals(null, TokenUtils.findSecondTokenText(new ArrayList<CliToken>()));

        //list with null value
        Assert.assertEquals(null,
                TokenUtils.findSecondTokenText(newCliTokenList(new CliToken[]{null})));
        Assert.assertEquals(null,
                TokenUtils.findSecondTokenText(newCliTokenList(new CliToken[]{null, textCliToken})));
        Assert.assertEquals(null,
                TokenUtils.findSecondTokenText(newCliTokenList(new CliToken[]{null, nonTextCliToken, textCliToken})));
        Assert.assertEquals(textCliToken.value(),
                TokenUtils.findSecondTokenText(newCliTokenList(new CliToken[]{null, nonTextCliToken, textCliToken, textCliToken})));

        //list with normal inputs
        Assert.assertEquals(null,
                TokenUtils.findSecondTokenText(newCliTokenList(new CliToken[]{textCliToken})));
        Assert.assertEquals(null,
                TokenUtils.findSecondTokenText(newCliTokenList(new CliToken[]{nonTextCliToken})));
        Assert.assertEquals(null,
                TokenUtils.findSecondTokenText(newCliTokenList(new CliToken[]{nonTextCliToken, textCliToken})));
        Assert.assertEquals(textCliToken.value(),
                TokenUtils.findSecondTokenText(newCliTokenList(new CliToken[]{textCliToken, nonTextCliToken, textCliToken})));

    }

}