[Lldb-commits] [lldb] r218422 - The beginnings of a gtest-based test framework.

Todd Fiala tfiala at google.com
Thu Sep 25 12:35:48 PDT 2014


Fixed this up here:

svn commit
Adding         gtest
Adding         gtest/Makefile
Adding         gtest/gtest.xcodeproj
Adding         gtest/gtest.xcodeproj/project.pbxproj
Adding         gtest/make
Adding         gtest/make/Makefile.rules
Adding         gtest/unittest
Adding         gtest/unittest/Makefile
Adding         gtest/unittest/Plugins
Adding         gtest/unittest/Plugins/Process
Adding         gtest/unittest/Plugins/Process/Linux
Adding         gtest/unittest/Plugins/Process/Linux/Makefile
Adding
gtest/unittest/Plugins/Process/Linux/ThreadStateCoordinatorTest.cpp
Sending        lldb.xcodeproj/project.pbxproj
Sending        lldb.xcworkspace/contents.xcworkspacedata
Sending        source/Plugins/Process/Linux/CMakeLists.txt
Adding         source/Plugins/Process/Linux/ThreadStateCoordinator.cpp
Adding         source/Plugins/Process/Linux/ThreadStateCoordinator.h
Deleting       test/c++/make/Makefile.rules
Deleting       test/c++/native_process/thread_state_coordinator/Makefile
Deleting
test/c++/native_process/thread_state_coordinator/ThreadStateCoordinatorTest.cpp
Transmitting file data ...........
Committed revision 218460.


On Thu, Sep 25, 2014 at 10:44 AM, Todd Fiala <tfiala at google.com> wrote:

> BTW I'll have that fixed up and checked in soon, I'm just fixing a couple
> issues with build directory changes and getting it hooked into Xcode.
>
> On Thu, Sep 25, 2014 at 10:43 AM, Todd Fiala <tfiala at google.com> wrote:
>
>> > Yeah, took me a minute to sort that out since the Python package that
>> the regular testsuite uses is called "unittest"...
>>
>> Ahhhh, ok.  Yeah I didn't even consider that.  I'm not too worried about
>> confusion there.  I'm expecting this will be a relatively low-traffic
>> directory, and it's scoped to gtest already, so I think we're likely okay
>> there.  But something to watch out for, thanks for bringing that up!
>>
>> On Thu, Sep 25, 2014 at 9:59 AM, <jingham at apple.com> wrote:
>>
>>>
>>> > On Sep 25, 2014, at 9:51 AM, Todd Fiala <tfiala at google.com> wrote:
>>> >
>>> > Right - that was the reason I wanted the "unittest" level.
>>>
>>> Yeah, took me a minute to sort that out since the Python package that
>>> the regular testsuite uses is called "unittest"...
>>>
>>> Jim
>>>
>>> >
>>> > I'm trying this scheme out now.
>>> >
>>> > On Thu, Sep 25, 2014 at 9:47 AM, <jingham at apple.com> wrote:
>>> > I don't know what kinds of tests you are going to write.  If they are
>>> all 1-1 test->source file, this seems a reasonable scheme.  Then if you
>>> have other tests that aren't this kind of direct white box test, we can
>>> make a parallel directory to unittest to hold them - and think of the name
>>> for it at that point...
>>> >
>>> > Jim
>>> >
>>> > > On Sep 25, 2014, at 7:42 AM, Todd Fiala <tfiala at google.com> wrote:
>>> > >
>>> > > > Any thoughts on the structure underneath gtest?
>>> > >
>>> > > One idea is, for the case of unittests, where the goal is to
>>> directly test class functionality:
>>> > >
>>> > > gtest/unittest/{MIRROR_lldb_source_path_to_class_dir}
>>> > >
>>> > > e.g. for the new
>>> source/Plugins/Process/Linux/ThreadStateCoordinator.cpp:
>>> > >
>>> > > gtest/unittest/Plugins/Process/Linux/ThreadStateCoordinatorTest.cpp
>>> > >
>>> > > ?
>>> > >
>>> > > -Todd
>>> > >
>>> > > On Thu, Sep 25, 2014 at 7:34 AM, Todd Fiala <tfiala at google.com>
>>> wrote:
>>> > > > Maybe it would be better to make a parallel gtest directory, so
>>> the unittest2 framework crawler doesn't accidentally find its way into any
>>> of these tests.
>>> > >
>>> > > I'm expecting we'll push things around a bit.  gtest at the top
>>> level sounds reasonable to me.
>>> > >
>>> > > > Also, can you think of a better outer directory name than c++?
>>> > >
>>> > > I think gtest at the top level covers this.  Sound reasonable?
>>> > >
>>> > > > I would naively think some of the lang/cpp tests had wandered
>>> their way out of their proper directory...
>>> > >
>>> > > Agreed.
>>> > >
>>> > > Any thoughts on the structure underneath gtest?  My personal
>>> objectives are to be able to unit test low-level code that is hard to test
>>> via the more high level system tests that we do with Python.  I don't
>>> anticipate there will be a lot of tests in here (relatively speaking).
>>> Certainly on my end it's just a handful of classes.
>>> > >
>>> > > -Todd
>>> > >
>>> > > On Wed, Sep 24, 2014 at 4:17 PM, <jingham at apple.com> wrote:
>>> > > Maybe it would be better to make a parallel gtest directory, so the
>>> unittest2 framework crawler doesn't accidentally find its way into any of
>>> these tests.  Also, can you think of a better outer directory name than
>>> c++?  I assume that name choice is because these are white box tests of the
>>> lldb_private C++ API, but I don't think that would be obvious to anyone
>>> looking at the directories.  I would naively think some of the lang/cpp
>>> tests had wandered their way out of their proper directory...
>>> > >
>>> > > Jim
>>> > >
>>> > >
>>> > > > On Sep 24, 2014, at 3:57 PM, Todd Fiala <todd.fiala at gmail.com>
>>> wrote:
>>> > > >
>>> > > > Author: tfiala
>>> > > > Date: Wed Sep 24 17:57:33 2014
>>> > > > New Revision: 218422
>>> > > >
>>> > > > URL: http://llvm.org/viewvc/llvm-project?rev=218422&view=rev
>>> > > > Log:
>>> > > > The beginnings of a gtest-based test framework.
>>> > > >
>>> > > > Makes use of LLVM gtest support.  This does *not* run as part of
>>> > > > the lldb test suite.
>>> > > >
>>> > > > I'm using it to start testing some components that
>>> > > > I'll be adding to the inner guts of NativeThreadLinux to more
>>> > > > maintainably handle thread states and deferred thread state
>>> notification.
>>> > > >
>>> > > > Runs with default Makefile target "test" using gmake within a given
>>> > > > test directory (currently only
>>> test/c++/native_process/thread_state_coordinator).
>>> > > >
>>> > > > The Makefile.rules currently assume it is using the LLVM gtest.
>>> It works on
>>> > > > a canonical MacOSX dir structture (i.e. lldb, lldb/llvm,
>>> lldb/llvm/tools/clang).
>>> > > > It also works on Ubuntu assuming the standard dir layout of llvm,
>>> llvm/tools/clang,
>>> > > > llvm/tools/lldb.  In this case, it expects a directory called
>>> build-debug parallel
>>> > > > to the llvm source dir.  All directory assumptions can be
>>> overridden with
>>> > > > environment variables.  See test/c++/make/Makefile.rules for
>>> details.
>>> > > >
>>> > > > We'll want to make this smarter in the future, particularly around
>>> finding the LLVM build
>>> > > > output dir.
>>> > > >
>>> > > > Added:
>>> > > >    lldb/trunk/test/c++/
>>> > > >    lldb/trunk/test/c++/make/
>>> > > >    lldb/trunk/test/c++/make/Makefile.rules
>>> > > >    lldb/trunk/test/c++/native_process/
>>> > > >    lldb/trunk/test/c++/native_process/thread_state_coordinator/
>>> > > >
>>> lldb/trunk/test/c++/native_process/thread_state_coordinator/Makefile
>>> > > >
>>> lldb/trunk/test/c++/native_process/thread_state_coordinator/ThreadStateCoordinatorTest.cpp
>>> > > >
>>> > > > Added: lldb/trunk/test/c++/make/Makefile.rules
>>> > > > URL:
>>> http://llvm.org/viewvc/llvm-project/lldb/trunk/test/c%2B%2B/make/Makefile.rules?rev=218422&view=auto
>>> > > >
>>> ==============================================================================
>>> > > > --- lldb/trunk/test/c++/make/Makefile.rules (added)
>>> > > > +++ lldb/trunk/test/c++/make/Makefile.rules Wed Sep 24 17:57:33
>>> 2014
>>> > > > @@ -0,0 +1,58 @@
>>> > > > +# Retrieve this Makefile's location.
>>> > > > +THIS_FILE_DIR := $(shell dirname $(realpath $(lastword
>>> $(MAKEFILE_LIST))))/
>>> > > > +
>>> > > > +# Set default target to be test
>>> > > > +.DEFAULT_GOAL := test
>>> > > > +
>>> > > > +# Set up GTEST for canonical Linux and MacOSX source trees.
>>> > > > +ifeq ($(wildcard ../../../../llvm/utils/unittest/googletest),)
>>> > > > +    # Assume llvm/tools/lldb (Non-MacOSX) directory form.
>>> > > > +    LLVM_BASE_DIR := $(realpath ../../../../../..)
>>> > > > +else
>>> > > > +    # Assume lldb/llvm (MacOSX Xcode) directory form.
>>> > > > +    LLVM_BASE_DIR := $(realpath ../../../../llvm)
>>> > > > +endif
>>> > > > +
>>> > > > +ifeq ($(GTEST_DIR),)
>>> > > > +    GTEST_DIR := $(LLVM_BASE_DIR)/utils/unittest/googletest
>>> > > > +endif
>>> > > > +GTEST_INCLUDE_DIR := $(GTEST_DIR)/include
>>> > > > +
>>> > > > +ifeq ($(LLVM_BUILD_DIR),)
>>> > > > +    ifneq ($(wildcard
>>> $(THIS_FILE_DIR)../../../llvm-build/Release+Asserts/x86_64/Release+Asserts),)
>>> > > > +        LLVM_BUILD_DIR := $(realpath
>>> $(THIS_FILE_DIR)../../../llvm-build/Release+Asserts/x86_64/Release+Asserts)
>>> > > > +    else ifneq ($(wildcard
>>> $(THIS_FILE_DIR)../../../../../../build-debug/lib),)
>>> > > > +        LLVM_BUILD_DIR := $(realpath
>>> $(THIS_FILE_DIR)../../../../../../build-debug)
>>> > > > +    endif
>>> > > > +endif
>>> > > > +
>>> > > > +ifeq ($(LLVM_BUILD_DIR),)
>>> > > > +    $(error Could not find LLVM build output dir, please set it
>>> with LLVM_BUILD_DIR)
>>> > > > +endif
>>> > > > +GTEST_STATIC_LIB_DIR := $(LLVM_BUILD_DIR)/lib
>>> > > > +
>>> > > > +ifeq ($(LLVM_BUILD_INCLUDE_DIR),)
>>> > > > +    ifneq ($(wildcard $(LLVM_BUILD_DIR)/../include),)
>>> > > > +        LLVM_BUILD_INCLUDE_DIR := $(realpath
>>> $(LLVM_BUILD_DIR)/../include)
>>> > > > +    else ifneq ($(wildcard $(LLVM_BUILD_DIR)/include),)
>>> > > > +        LLVM_BUILD_INCLUDE_DIR := $(realpath
>>> $(LLVM_BUILD_DIR)/include)
>>> > > > +    endif
>>> > > > +endif
>>> > > > +
>>> > > > +ifeq ($(LLVM_BUILD_INCLUDE_DIR),)
>>> > > > +    $(error Could not find LLVM build directory include dir,
>>> please set it with LLVM_BUILD_INCLUDE_DIR)
>>> > > > +endif
>>> > > > +
>>> > > > +$(info LLVM_BASE_DIR = $(LLVM_BASE_DIR))
>>> > > > +$(info LLVM_BUILD_DIR = $(LLVM_BUILD_DIR))
>>> > > > +$(info GTEST_DIR = $(GTEST_DIR))
>>> > > > +$(info GTEST_INCLUDE_DIR = $(GTEST_INCLUDE_DIR))
>>> > > > +$(info GTEST_STATIC_LIB_DIR = $(GTEST_STATIC_LIB_DIR))
>>> > > > +
>>> > > > +CFLAGS_EXTRAS += -I $(GTEST_INCLUDE_DIR) -I
>>> $(LLVM_BASE_DIR)/include -I $(LLVM_BUILD_INCLUDE_DIR)
>>> > > > +LD_EXTRAS += $(GTEST_STATIC_LIB_DIR)/libgtest.a
>>> $(GTEST_STATIC_LIB_DIR)/libgtest_main.a
>>> $(GTEST_STATIC_LIB_DIR)/libLLVMSupport.a
>>> > > > +
>>> > > > +include $(THIS_FILE_DIR)../../make/Makefile.rules
>>> > > > +
>>> > > > +test:: $(EXE)
>>> > > > +     $(realpath $(EXE))
>>> > > >
>>> > > > Added:
>>> lldb/trunk/test/c++/native_process/thread_state_coordinator/Makefile
>>> > > > URL:
>>> http://llvm.org/viewvc/llvm-project/lldb/trunk/test/c%2B%2B/native_process/thread_state_coordinator/Makefile?rev=218422&view=auto
>>> > > >
>>> ==============================================================================
>>> > > > ---
>>> lldb/trunk/test/c++/native_process/thread_state_coordinator/Makefile (added)
>>> > > > +++
>>> lldb/trunk/test/c++/native_process/thread_state_coordinator/Makefile Wed
>>> Sep 24 17:57:33 2014
>>> > > > @@ -0,0 +1,14 @@
>>> > > > +LEVEL = ../../make
>>> > > > +
>>> > > > +CFLAGS_EXTRAS := -D__STDC_LIMIT_MACROS -D__STDC_FORMAT_MACROS
>>> -D__STDC_CONSTANT_MACROS
>>> > > > +ENABLE_THREADS := YES
>>> > > > +CXX_SOURCES := $(wildcard *.cpp)
>>> > > > +MAKE_DSYM :=NO
>>> > > > +
>>> > > > +OS := $(shell uname -s)
>>> > > > +$(info OS $(OS))
>>> > > > +ifeq ($(OS),Linux)
>>> > > > +    LD_EXTRAS += -lncurses -ldl
>>> > > > +endif
>>> > > > +
>>> > > > +include $(LEVEL)/Makefile.rules
>>> > > >
>>> > > > Added:
>>> lldb/trunk/test/c++/native_process/thread_state_coordinator/ThreadStateCoordinatorTest.cpp
>>> > > > URL:
>>> http://llvm.org/viewvc/llvm-project/lldb/trunk/test/c%2B%2B/native_process/thread_state_coordinator/ThreadStateCoordinatorTest.cpp?rev=218422&view=auto
>>> > > >
>>> ==============================================================================
>>> > > > ---
>>> lldb/trunk/test/c++/native_process/thread_state_coordinator/ThreadStateCoordinatorTest.cpp
>>> (added)
>>> > > > +++
>>> lldb/trunk/test/c++/native_process/thread_state_coordinator/ThreadStateCoordinatorTest.cpp
>>> Wed Sep 24 17:57:33 2014
>>> > > > @@ -0,0 +1,7 @@
>>> > > > +#include <limits.h>
>>> > > > +#include "gtest/gtest.h"
>>> > > > +
>>> > > > +TEST(ThreadStateCoordinatorTest, ExpectEqualsWorks)
>>> > > > +{
>>> > > > +     EXPECT_EQ(1, 1);
>>> > > > +}
>>> > > >
>>> > > >
>>> > > > _______________________________________________
>>> > > > lldb-commits mailing list
>>> > > > lldb-commits at cs.uiuc.edu
>>> > > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>>> > >
>>> > > _______________________________________________
>>> > > lldb-commits mailing list
>>> > > lldb-commits at cs.uiuc.edu
>>> > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>>> > >
>>> > >
>>> > >
>>> > > --
>>> > > Todd Fiala |   Software Engineer |     tfiala at google.com |
>>> 650-943-3180
>>> > >
>>> > >
>>> > >
>>> > >
>>> > > --
>>> > > Todd Fiala |   Software Engineer |     tfiala at google.com |
>>> 650-943-3180
>>> > >
>>> >
>>> >
>>> >
>>> >
>>> > --
>>> > Todd Fiala |   Software Engineer |     tfiala at google.com |
>>> 650-943-3180
>>> >
>>>
>>>
>>
>>
>> --
>> Todd Fiala | Software Engineer | tfiala at google.com | 650-943-3180
>>
>
>
>
> --
> Todd Fiala | Software Engineer | tfiala at google.com | 650-943-3180
>



-- 
Todd Fiala | Software Engineer | tfiala at google.com | 650-943-3180
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20140925/17328ccc/attachment.html>


More information about the lldb-commits mailing list