Back to Repositories

Validating Email Address Parsing Implementation in ZXing

This test suite validates email address parsing functionality in the ZXing barcode processing library. It thoroughly tests the EmailAddressParsedResult class which handles various email address formats, mailto: URIs, and different email-related barcode formats.

Test Coverage Overview

The test suite provides comprehensive coverage of email address validation and parsing scenarios.

  • Basic email address format validation
  • Complex email address patterns including international characters
  • Mailto URI parsing with multiple recipients
  • MATMSG and SMTP format handling
  • Email components parsing (To, CC, BCC, Subject, Body)

Implementation Analysis

The testing approach uses JUnit framework with systematic validation of email parsing edge cases.

Key patterns include:
  • Modular test methods for specific email components
  • Helper method pattern for reusable test scenarios
  • Assertion-based validation using JUnit Assert class
  • Fake Result object creation for parsing tests

Technical Details

Testing infrastructure includes:

  • JUnit 4 testing framework
  • ZXing core library integration
  • BarcodeFormat enumeration usage
  • Custom ParsedResult implementation
  • Result class simulation for testing

Best Practices Demonstrated

The test suite exemplifies several testing best practices:

  • Comprehensive negative and positive test cases
  • Clear test method naming conventions
  • Efficient test organization by functionality
  • Proper test isolation and setup
  • Thorough validation of edge cases and invalid inputs

zxing/zxing

core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java

            
/*
 * Copyright 2007 ZXing authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.zxing.client.result;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import org.junit.Assert;
import org.junit.Test;

/**
 * Tests {@link EmailAddressParsedResult}.
 *
 * @author Sean Owen
 */
public final class EmailAddressParsedResultTestCase extends Assert {

  @Test
  public void testEmailAddresses() {
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress(null));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress(""));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123.365.com"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("abc.def.com"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("[email protected]"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@abcd"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@ab,cd.com"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@ab#cd.com"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@ab!#cd.com"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("123@ab_cd.com"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("[email protected]"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("[email protected]"));
    assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("[email protected]"));
    assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("[email protected]"));
    assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("[email protected]"));
    assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("[email protected]"));
    assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("[email protected]"));
    assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("建設省[email protected]"));
    assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("[email protected]"));
    assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("建設省[email protected]"));
  }

  @Test
  public void testEmailAddress() {
    doTest("[email protected]", "[email protected]", null, null);
    doTest("mailto:[email protected]", "[email protected]", null, null);
  }

  
  @Test
  public void testTos() {
    doTest("mailto:[email protected],[email protected]",
           new String[] {"[email protected]", "[email protected]"},
           null, null, null, null);
    doTest("mailto:[email protected],[email protected]",
           new String[] {"[email protected]", "[email protected]"},
           null, null, null, null);
  }

  @Test
  public void testCCs() {
    doTest("mailto:[email protected]",
           null,
           new String[] {"[email protected]"},
           null, null, null);
    doTest("mailto:[email protected],[email protected]",
           null,
           new String[] {"[email protected]", "[email protected]"},
           null, null, null);
  }

  @Test
  public void testBCCs() {
    doTest("mailto:[email protected]",
           null, null,
           new String[] {"[email protected]"},
           null, null);
    doTest("mailto:[email protected],[email protected]",
           null, null,
           new String[] {"[email protected]", "[email protected]"},
           null, null);
  }

  @Test
  public void testAll() {
    doTest("mailto:[email protected][email protected]&[email protected]&subject=baz&body=buzz",
           new String[] {"[email protected]"},
           new String[] {"[email protected]"},
           new String[] {"[email protected]"},
           "baz",
           "buzz");
  }

  @Test
  public void testEmailDocomo() {
    doTest("MATMSG:TO:[email protected];;", "[email protected]", null, null);
    doTest("MATMSG:TO:[email protected];SUB:Stuff;;", "[email protected]", "Stuff", null);
    doTest("MATMSG:TO:[email protected];SUB:Stuff;BODY:This is some text;;", "[email protected]",
        "Stuff", "This is some text");
  }

  @Test
  public void testSMTP() {
    doTest("smtp:[email protected]", "[email protected]", null, null);
    doTest("SMTP:[email protected]", "[email protected]", null, null);
    doTest("smtp:[email protected]:foo", "[email protected]", "foo", null);
    doTest("smtp:[email protected]:foo:bar", "[email protected]", "foo", "bar");
  }

  private static void doTest(String contents,
                             String to,
                             String subject,
                             String body) {
    doTest(contents, new String[] {to}, null, null, subject, body);
  }

  private static void doTest(String contents,
                             String[] tos,
                             String[] ccs,
                             String[] bccs,
                             String subject,
                             String body) {
    Result fakeResult = new Result(contents, null, null, BarcodeFormat.QR_CODE);
    ParsedResult result = ResultParser.parseResult(fakeResult);
    assertSame(ParsedResultType.EMAIL_ADDRESS, result.getType());
    EmailAddressParsedResult emailResult = (EmailAddressParsedResult) result;
    assertArrayEquals(tos, emailResult.getTos());
    assertArrayEquals(ccs, emailResult.getCCs());
    assertArrayEquals(bccs, emailResult.getBCCs());
    assertEquals(subject, emailResult.getSubject());
    assertEquals(body, emailResult.getBody());
  }

}