1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// found in the LICENSE file. 4424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/barrier_closure.h" 6424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/bind.h" 8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace { 11424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void Increment(int* count) { (*count)++; } 13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST(BarrierClosureTest, RunImmediatelyForZeroClosures) { 15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int count = 0; 16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::Closure doneClosure(base::Bind(&Increment, base::Unretained(&count))); 17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::Closure barrierClosure = base::BarrierClosure(0, doneClosure); 19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(1, count); 20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST(BarrierClosureTest, RunAfterNumClosures) { 23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int count = 0; 24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::Closure doneClosure(base::Bind(&Increment, base::Unretained(&count))); 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::Closure barrierClosure = base::BarrierClosure(2, doneClosure); 27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(0, count); 28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) barrierClosure.Run(); 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(0, count); 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) barrierClosure.Run(); 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(1, count); 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace 37