# How to Enable or Disable Colored Output in GoogleTest Terminal

> Control colored output in GoogleTest terminal. Learn how to enable or disable ANSI colors using the GTEST_COLOR environment variable or the gtest_color command-line flag for clearer test results.

- Repository: [Google/googletest](https://github.com/google/googletest)
- Tags: how-to-guide
- Published: 2026-09-01

---

**Set the `GTEST_COLOR` environment variable to `"yes"`, `"no"`, or `"auto"`, or use the `--gtest_color` command-line flag when running your test binary to control ANSI color output in GoogleTest.**

GoogleTest provides flexible mechanisms for controlling colored terminal output, allowing developers to force colors on, suppress them entirely, or rely on automatic detection. According to the `google/googletest` source code, this behavior is governed by a simple priority system where command-line flags override environment variables, with both defaulting to `"auto"` when unspecified.

## Understanding the GTEST_COLOR Mechanism

GoogleTest supports two primary interfaces for color configuration: an environment variable and a command-line flag. Both accept identical string values and serve the same purpose, but they differ in precedence and use case.

### The GTEST_COLOR Environment Variable

The **`GTEST_COLOR`** environment variable controls color output globally for all GoogleTest binaries in your session. Set it to one of three string values before invoking your test executable:

- **`"yes"`** — Force colored output regardless of terminal capability
- **`"no"`** — Suppress all ANSI color codes
- **`"auto"`** — Enable colors only when output is attached to a terminal that supports ANSI codes (default behavior)

```bash
export GTEST_COLOR=yes
./my_test_binary

```

### The --gtest_color Command-Line Flag

For per-execution control, GoogleTest accepts the **`--gtest_color`** flag directly in the command line. This flag accepts the same three values as the environment variable:

```bash
./my_test_binary --gtest_color=yes

```

When both the environment variable and command-line flag are specified, **the flag takes precedence**. This allows you to override a global `GTEST_COLOR=no` setting for a specific test run, or vice versa.

## How GoogleTest Determines Color Output

As implemented in `src/gtest.cc`, GoogleTest evaluates color settings in the following priority order:

1. Check for `--gtest_color` flag (highest priority)
2. Check for `GTEST_COLOR` environment variable
3. Default to `"auto"` if neither is present

When the mode is set to `"auto"`, GoogleTest delegates detection to the port-specific implementation in `src/gtest-port.cc`. This logic determines whether the output stream is attached to a terminal (TTY) and whether that terminal supports ANSI color escape sequences. If the output is redirected to a file or pipe, colors are automatically disabled to prevent escape codes from polluting the log files.

## Implementation Details in the Source Code

The color handling logic resides in the core GoogleTest implementation files. In **`src/gtest.cc`**, the `Color` enumeration and associated parsing logic read the environment variable and command-line arguments, validating the input against the allowed values (`"yes"`, `"no"`, `"auto"`, and case variations).

The **`src/gtest-port.cc`** file contains the platform-specific terminal capability detection. This implementation checks `isatty()` on POSIX systems or equivalent console API calls on Windows to determine whether the standard output stream supports ANSI color codes when operating in `"auto"` mode.

The official documentation in **[`docs/advanced.md`](https://github.com/google/googletest/blob/main/docs/advanced.md)** defines the public contract for these settings, specifying that both mechanisms accept the same values and explaining the override behavior between environment variables and flags.

## Practical Configuration Examples

Force colors when running in a CI environment that supports ANSI codes but appears as a non-TTY:

```bash
export GTEST_COLOR=yes
./test_suite --gtest_filter=ImportantTests

```

Suppress colors when redirecting output to a file for machine parsing:

```bash
./test_suite --gtest_color=no > test_results.txt

```

Override a disabled global setting for a single debugging session:

```bash
export GTEST_COLOR=no
./test_suite --gtest_color=yes  # Colors appear despite env var

```

## Summary

- **Environment Variable:** Use `GTEST_COLOR` (values: `yes`, `no`, `auto`) for session-wide defaults
- **Command-Line Flag:** Use `--gtest_color` (values: yes, no, auto) for per-execution control
- **Precedence:** Command-line flags override environment variables
- **Default Behavior:** `auto` mode detects terminal capability automatically via `src/gtest-port.cc`
- **Source Locations:** Implementation spans `src/gtest.cc` (parsing) and `src/gtest-port.cc` (detection)

## Frequently Asked Questions

### What is the default color setting in GoogleTest?

By default, GoogleTest operates in `"auto"` mode, which automatically enables colored output only when the standard output stream is attached to a terminal that supports ANSI color codes. This prevents color escape sequences from appearing in log files or build system outputs.

### Does --gtest_color override the GTEST_COLOR environment variable?

Yes. When you specify the `--gtest_color` command-line flag, it takes precedence over the `GTEST_COLOR` environment variable. This allows you to override global settings for specific test runs without modifying environment configuration.

### How does GoogleTest detect terminal color support?

In `src/gtest-port.cc`, GoogleTest uses platform-specific APIs such as `isatty()` on POSIX systems or console mode checks on Windows to determine if standard output is a terminal. If the detection returns true and the mode is `"auto"`, ANSI color codes are enabled; otherwise, output remains plain text.

### Can I enable colors when redirecting output to a file?

Yes. While the default `"auto"` mode disables colors for non-terminal output (including file redirects), you can force color output to files by setting `GTEST_COLOR=yes` or using `--gtest_color=yes`. This embeds ANSI escape codes in the file, which may be useful if you intend to view the file with a tool that renders color codes.