Home | History | Annotate | Download | only in test
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "gin/test/file_runner.h"
      6 
      7 #include "base/file_util.h"
      8 #include "base/message_loop/message_loop.h"
      9 #include "base/path_service.h"
     10 #include "gin/converter.h"
     11 #include "gin/modules/console.h"
     12 #include "gin/modules/module_registry.h"
     13 #include "gin/public/isolate_holder.h"
     14 #include "gin/test/gtest.h"
     15 #include "gin/try_catch.h"
     16 #include "testing/gtest/include/gtest/gtest.h"
     17 
     18 namespace gin {
     19 
     20 namespace {
     21 
     22 std::vector<base::FilePath> GetModuleSearchPaths() {
     23   std::vector<base::FilePath> search_paths(2);
     24   PathService::Get(base::DIR_SOURCE_ROOT, &search_paths[0]);
     25   PathService::Get(base::DIR_EXE, &search_paths[1]);
     26   search_paths[1] = search_paths[1].AppendASCII("gen");
     27   return search_paths;
     28 }
     29 
     30 }  // namespace
     31 
     32 FileRunnerDelegate::FileRunnerDelegate()
     33     : ModuleRunnerDelegate(GetModuleSearchPaths()) {
     34   AddBuiltinModule(Console::kModuleName, Console::GetTemplate);
     35   AddBuiltinModule(GTest::kModuleName, GTest::GetTemplate);
     36 }
     37 
     38 FileRunnerDelegate::~FileRunnerDelegate() {
     39 }
     40 
     41 void FileRunnerDelegate::UnhandledException(Runner* runner,
     42                                             TryCatch& try_catch) {
     43   ModuleRunnerDelegate::UnhandledException(runner, try_catch);
     44   FAIL() << try_catch.GetStackTrace();
     45 }
     46 
     47 void RunTestFromFile(const base::FilePath& path, FileRunnerDelegate* delegate) {
     48   ASSERT_TRUE(base::PathExists(path)) << path.LossyDisplayName();
     49   std::string source;
     50   ASSERT_TRUE(ReadFileToString(path, &source));
     51 
     52   base::MessageLoop message_loop;
     53 
     54   gin::IsolateHolder instance;
     55   gin::Runner runner(delegate, instance.isolate());
     56   {
     57     gin::Runner::Scope scope(&runner);
     58     v8::V8::SetCaptureStackTraceForUncaughtExceptions(true);
     59     runner.Run(source, path.AsUTF8Unsafe());
     60 
     61     message_loop.RunUntilIdle();
     62 
     63     v8::Handle<v8::Value> result = runner.context()->Global()->Get(
     64         StringToSymbol(runner.isolate(), "result"));
     65     EXPECT_EQ("PASS", V8ToString(result));
     66   }
     67 }
     68 
     69 }  // namespace gin
     70