Back to Repositories

Testing JSON Leniency Parsing Workflow in Google Gson

This test suite evaluates the leniency features of the Gson library, focusing on its ability to parse non-standard JSON formats. The tests verify Gson’s capability to handle comments and relaxed syntax in JSON parsing, demonstrating the library’s flexibility in real-world scenarios.

Test Coverage Overview

The test suite covers Gson’s lenient parsing capabilities, specifically testing the handling of comments within JSON structures.

Key areas tested include:
  • Non-standard JSON parsing with comments
  • Single element array parsing with additional syntax
  • Verification of parsed output against expected results

Implementation Analysis

The testing approach utilizes JUnit framework with the GsonBuilder’s setLenient() configuration. The implementation demonstrates a clear pattern of setting up a lenient Gson instance and testing its parsing capabilities against specially formatted input strings.

Framework features leveraged:
  • JUnit @Before and @Test annotations
  • TypeToken for generic type handling
  • Truth assertion library for result verification

Technical Details

Testing tools and configuration:
  • JUnit testing framework
  • Google Truth assertion library
  • Gson library with lenient parsing enabled
  • Custom GsonBuilder configuration
  • TypeToken for handling generic type information

Best Practices Demonstrated

The test suite exemplifies several testing best practices in Java unit testing.

Notable practices include:
  • Proper test setup isolation using @Before
  • Clear test method naming conventions
  • Single responsibility per test case
  • Appropriate use of type safety with TypeToken
  • Explicit assertion statements using Truth library

google/gson

gson/src/test/java/com/google/gson/functional/LeniencyTest.java

            
/*
 * Copyright (C) 2016 The Gson 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.gson.functional;

import static com.google.common.truth.Truth.assertThat;
import static java.util.Collections.singletonList;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import java.util.List;
import org.junit.Before;
import org.junit.Test;

/** Functional tests for leniency option. */
public class LeniencyTest {

  private Gson gson;

  @SuppressWarnings({"deprecation", "InlineMeInliner"}) // for GsonBuilder.setLenient
  @Before
  public void setUp() throws Exception {
    gson = new GsonBuilder().setLenient().create();
  }

  @Test
  public void testLenientFromJson() {
    List<String> json =
        gson.fromJson(
            "[ # One!\n" //
                + "  'Hi' #Element!\n" //
                + "] # Array!",
            new TypeToken<List<String>>() {}.getType());
    assertThat(json).isEqualTo(singletonList("Hi"));
  }
}