/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#if SK_SUPPORT_GPU

#include "GrContextFactory.h"
#include "Test.h"

DEF_GPUTEST(GrContextFactoryTest, reporter, factory) {
    // Reset in case some other test has been using it first.
    factory->destroyContexts();

    // Before we ask for a context, we expect the GL context to not be there.
    REPORTER_ASSERT(reporter,
                    NULL == factory->getGLContext(GrContextFactory::kNative_GLContextType));

    // After we ask for a context, we expect that the GL context to be there.
    factory->get(GrContextFactory::kNative_GLContextType);
    REPORTER_ASSERT(reporter,
                    factory->getGLContext(GrContextFactory::kNative_GLContextType) != NULL);

    // If we did not ask for a context with the particular GL context, we would
    // expect the particular GL context to not be there.
    REPORTER_ASSERT(reporter,
                    NULL == factory->getGLContext(GrContextFactory::kNull_GLContextType));
}

#endif
