/*
 * Copyright 2015 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#include "src/core/SkPathPriv.h"
#include "tests/Test.h"

DEF_TEST(IsClosedSingleContourTest, reporter) {
    SkPath p;
    REPORTER_ASSERT(reporter, !SkPathPriv::IsClosedSingleContour(p));

    p.reset();
    p.close();
    REPORTER_ASSERT(reporter, !SkPathPriv::IsClosedSingleContour(p));

    p.reset();
    p.moveTo(10, 10);
    p.close();
    REPORTER_ASSERT(reporter, SkPathPriv::IsClosedSingleContour(p));

    p.reset();
    p.moveTo(10, 10);
    p.lineTo(20, 20);
    p.close();
    REPORTER_ASSERT(reporter, SkPathPriv::IsClosedSingleContour(p));

    p.reset();
    p.moveTo(10, 10);
    p.lineTo(20, 20);
    p.quadTo(30, 30, 40, 40);
    p.cubicTo(50, 50, 60, 60, 70, 70);
    p.conicTo(30, 30, 40, 40, 0.5);
    p.close();
    REPORTER_ASSERT(reporter, SkPathPriv::IsClosedSingleContour(p));

    p.reset();
    p.moveTo(10, 10);
    p.lineTo(20, 20);
    p.lineTo(20, 30);
    REPORTER_ASSERT(reporter, !SkPathPriv::IsClosedSingleContour(p));

    p.reset();
    p.moveTo(10, 10);
    p.lineTo(20, 20);
    p.moveTo(10, 10);
    p.lineTo(20, 30);
    p.close();
    REPORTER_ASSERT(reporter, !SkPathPriv::IsClosedSingleContour(p));

    p.reset();
    p.moveTo(10, 10);
    p.lineTo(20, 20);
    p.close();
    p.lineTo(20, 30);
    p.close();
    REPORTER_ASSERT(reporter, !SkPathPriv::IsClosedSingleContour(p));
}
