test

Gtest之TEST和TEST_F宏的用法 gtest测试 阅读详情
... ...
        }
        else if (strcmp(argv[optind], "list") == 0) {
            Vector<String16> services = sm->listServices();
            aout << "Found " << services.size() << " services:" << endl;
            for (unsigned i = 0; i < services.size(); i++) {
                String16 name = services[i];
                sp<IBinder> service = sm->checkService(name);
                aout << i
                     << "\t" << good_old_string(name)
                     << ": [" << good_old_string(get_interface_name(service)) << "]"
                     << endl;
            }
        } else if (strcmp(argv[optind], "call") == 0) {
... ...


haha


// 这个好像是字符串转化相关的,String8 和 String16 都是 android 在 native 
// 对 char 串的封装
static String8 good_old_string(const String16& src)
{
    String8 name8;
    char ch8[2];
    ch8[1] = 0;
    for (unsigned j = 0; j < src.size(); j++) { 
        char16_t ch = src[j];
        if (ch < 128) ch8[0] = (char)ch;
        name8.append(ch8);
    }
    return name8;
}

haha


// get the name of the generic interface we hold a reference to
static String16 get_interface_name(sp<IBinder> service)
{
    if (service != NULL) {
        Parcel data, reply;
        status_t err = service->transact(IBinder::INTERFACE_TRANSACTION, data, &reply);              
        if (err == NO_ERROR) {
            return reply.readString16();                                                                                  
        }
    }
    return String16();
}

haha


status_t BBinder::onTransact(
    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
    switch (code) {
        case INTERFACE_TRANSACTION:
            reply->writeString16(getInterfaceDescriptor());
            return NO_ERROR;
... ...
        default:
            return UNKNOWN_TRANSACTION;
    }
}

haha


... ...
        
        } else if (strcmp(argv[optind], "call") == 0) {
            optind++;
            if (optind+1 < argc) {
                int serviceArg = optind;
                // 从 sm 那获取指定的 service 接口(Bp)
                sp<IBinder> service = sm->checkService(String16(argv[optind++]));
                // 获取服务的标示
                String16 ifName = get_interface_name(service);
                int32_t code = atoi(argv[optind++]);
                if (service != NULL && ifName.size() > 0) {
                    Parcel data, reply;
                    // 呵呵,先写服务的标示
                    // the interface name is first
                    data.writeInterfaceToken(ifName);
                    // 支持的参数有3种类型:i32、s16 和 intent
                    // then the rest of the call arguments
                    while (optind < argc) {
                        // i32 就是 int32,非常简单的类型,
                        // 直接使用 parcel 的 writeInt32 
                        if (strcmp(argv[optind], "i32") == 0) {
                            optind++;
                            if (optind >= argc) {
                                aerr << "service: no integer supplied for 'i32'" << endl;
                                wantsUsage = true;
                                result = 10;
                                break;
                            }
                            data.writeInt32(atoi(argv[optind++]));
                        } else if (strcmp(argv[optind], "s16") == 0) {
                            // s16 就是 String16,也是比较简单的类型
                            // parcel 都有现成的接口可用
                            optind++;
                            if (optind >= argc) {
                                aerr << "service: no string supplied for 's16'" << endl;
                                wantsUsage = true;
                                result = 10;
                                break;
                            }
                            data.writeString16(String16(argv[optind++]));
                        } else if (strcmp(argv[optind], "null") == 0) {
                            optind++;
                            data.writeStrongBinder(NULL);
                        } else if (strcmp(argv[optind], "intent") == 0) {
       
// 下面这个 intent 类型,就有点麻烦了,我暂时没去管它 ... ...
... ...
                        } else {
                            aerr << "service: unknown option " << argv[optind] << endl;
                            wantsUsage = true;
                            result = 10;
                            break;
                        }
                    }
                    // parcel 打好包好,调用 service 的 transact 函数
                    service->transact(code, data, &reply);
                    // 打印 parcel 打包的返回值
                    aout << "Result: " << reply << endl;
                } else {
                    aerr << "service: Service " << argv[serviceArg]
                        << " does not exist" << endl;
                    result = 10;
                }
            } else {
... ...


static final int TRANSACTION_startViewServer = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
static final int TRANSACTION_stopViewServer = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
static final int TRANSACTION_isViewServerRunning = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);
// 然后去翻下 IBinder 发现是从 1 开始的 
    enum {
        FIRST_CALL_TRANSACTION  = 0x00000001,
        LAST_CALL_TRANSACTION   = 0x00ffffff,
... ...
    };


/*
 * Starts the view server on the specified port.
 *
 * @param port The port to listener to.
 *
 * @return True if the server was successfully started, false otherwise.
 *
 * @see com.android.server.wm.ViewServer
 * @see com.android.server.wm.ViewServer#VIEW_SERVER_DEFAULT_PORT
 */
@Override
public boolean startViewServer(int port)


/**
 * ===== NOTICE =====
 * The first three methods must remain the first three methods. Scripts
 * and tools rely on their transaction number to work properly.
 */ 
// This is used for debugging
boolean startViewServer(int port);   // Transaction #1
boolean stopViewServer();            // Transaction #2
boolean isViewServerRunning();       // Transaction #3

@Override
public float getAnimationScale(int which) { 
    switch (which) {
        case 0: return mWindowAnimationScale;
        case 1: return mTransitionAnimationScale;
        case 2: return mAnimatorDurationScale; 
    }
    return 0;
}


gtest语法(一)TEST和TEST_F宏 TEST和TEST_F 阅读详情

相关推荐

CANoe教程 | 自动化测试功能-Test Module/Test Unit

概述 CANoe的测试模块包括Test Module和Test Unit两大组件,并且集成了TFS测试功能集(Test Feature Set)和TSL测试服务库(Test Service Library)来帮助用户实现高效的自动化测试。 TFS是CANoe扩展出来的一系列测试功能函数,包括测试报告的输出函数等。 TSL包含一系列的检测函数(Check Function)、激励函数(Stimulus Functions)、状态报告函数(Status Report Functions)以及检测控制函数(Ch

5118

Google Test 使用笔记(三)TEST宏初级使用

Google Test框架 TEST宏初级使用

nenchoumi3119的博客 1696

t-test,z-test原理

目录 Population & sample Population average treatment effect(PATE) Hypothesis Testing, t-test & p-value Execute t-test via Excel & Python z-test Population & sample Population是全体数据集,Sample是从Population中随机抽取的实验数据集,我们想通过sample的特征最终推断出popu

小白的博客 3422

如何分文件编写Boost Test的test case

如何分文件编写Boost Test的Test Case

Absorb Like A Sponge 2602

Google Test 入门(二)

本篇主要介绍Google Test 的测试示例。

ClaireQi的博客 902

gtest基础使用06:Google Test自带示例三:Test Fixture

gtest Test Fixture的学习

thexiaosi的博客 1220

Gtest之TEST宏的用法

TEST宏

sinat_31608641的博客 2766

AB Test & AA Test

AB Test & AA Test前言一、AB Test1. AB Test sampling2. AA Test3. AB Testing 前言 AA Test: 在进行AB Test之前,对AB Test的sampling进行测试,分析两个group之间存在的本源性差异。 AB Test: 为同一款产品设计两个不同的执行方案进行投放测试。方案中控制一个变量不相同,对照结果择优。 一、AB Test 1. AB Test sampling 常见的sampling维度: Geo/ Time S

the_why_cafe的博客 3476

gtest Test_F 和Test 区别

一般来说简单的测试用TEST简单测试TESTCpp代码#include &lt;gtest/gtest.h&gt;  int Factorial( int n )  {    if(n==2) return 100; //故意出个错,嘻嘻    return n&lt;=0? 1 : n*Factorial(n - 1);  }  //用TEST做简单测试  TEST(TestFactorial,...

下一站浮华的博客 9807

HUAWEI华为荣耀MagicBook MateBook B D E X 13 14 16 笔记本MateStation台式机原装Win10出厂Windows11系统

HUAWEI华为MateBookX原装出厂系统恢复原厂系统,型号:MACHC-WAE9LP、EUL-W29P、MACHR-W19L、MACHR-W29、MACHD-WFE9、MRGF-16、MACHR-W19BL、MACHD-WFE9Q、WT-W19、Mach-W19、Mach-W29、WT-W09、WT-W19、MACH-W29等。HUAWEI华为MateBookE原装出厂系统恢复原厂系统,型号:PAK-AL09、GK-W7X、GK-G58、GK-W76、DRC-W76等。

QQ17855069的博客 17万+

ComfyUI入门学习-教程篇

深入的 ComfyUI 教程,不同功能节点的详细指南。一个比较有意思的Comfyui教程,动画式学习。从安装到基础教程、高级教程再到各种工作流。非常全面,有教程有搭建好的工作流。

wincyfu的博客 1326

【C++ 单元测试】 GTest 指南:剖析 TEST_P 与 TYPED_TEST

在日常开发中,Google Test(GTest)已经成为C++单元测试领域的事实标准。从最初的 `TEST` 与 `TEST_F` 出发,很多团队逐渐发现针对不同类型或不同输入参数进行大规模测试时,往往需要更灵活的方式来组织测试用例,这就是 `TEST_P` 和 `TYPED_TEST` 的诞生背景。毕竟,正如荣格所言,“理解越多,也就越能够包容”,对测试框架的深入了解也能帮助我们更好地构建健壮的代码。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1719

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1305

Google Test入门教程

Google Test入门教程断言Test 架构一个简单的例子 断言 Assert:失败后终止 Expect:失败后继续 ASSERT_TRUE(condition); ASSERT_FALSE(condition); ASSERT_EQ(val1, val2); ASSERT_NQ(val1, val2); 失败后打印错误信息 EXPECT_EQ(val1, val2) << "val1 and va2 differ; Test 架构 TEST TestSuitName = 测试的函数名

I_ren的博客 1901

手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)

本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。

weixin_27014595的博客 392

ANSYS APDL 异类单元连接实战:MPC方法在壳-实体装配中的应用

本文详细介绍了在ANSYS APDL中使用MPC方法实现壳单元与实体单元高效连接的技术要点。通过分析工程仿真中的常见需求,阐述了MPC方法在解决异类单元连接问题上的优势,包括网格独立性、自由度耦合和载荷传递等特性,并提供了具体的APDL命令流操作示例和实用经验技巧。

weixin_33391446的博客 178

Python利用scipy实现T-TEST和Z-TEST源代码

使用excel的T.TEST和Z.TEST计算不方便,使用python的包scipy可以方便实现计算,但是网上有参考价值的资料少,特此总结源代码,直接展示常用方法。 一、T-TEST from scipy.stats import ttest_1samp, ttest_ind, ttest_rel import scipy from scipy import stats 上面是常用的导入,下边对如何使用进行说明。 rvs1 = stats.norm.rvs(loc=600, scale=13.14, siz

cs的博客 2203

MTK Android 12 Clone Project 克隆项目

本文介绍了如何使用MTK Android 12 Clone Project 克隆一个新的项目。通过使用绝对路径执行Perl脚本,并根据需要选择升级或降级位数,可以成功地生成一个新的项目并进行编译。希望本文对xdm有所帮助。

我其实什么都不会 942

linux geogle test教程及TEST_F,TEST_P宏用法

这样,同一个TestFixtureName下的每个TEST_F都会先执行SetUp,最后执行TearDwom。从上图可以看到,先使用第一个命令查到所有testcase的名字,在通过第二条命令筛选特定的testcase运行,并且可以使用通配符。如果发现自己编写了两个或多个对相似数据进行操作的测试,可以使用 test fixture 来为多个测试重用这些相同的配置。,直接执行,就全跑一遍,很耗时,有时候需要只测试某个case,怎么只运行某个测试用例呢?函数及其判断条件,如下表。,并根据断言失败的种类,

荣耀与梦想来日方长 3664

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

MVSNet (pytorch版) 代码注释版 下载 (注释非常详细,代码结构有所调整,使用起来更方便) 深度学习三维重建 MVSNet-ECCV-2018 (源码、pytorch版、原文+注释、译文+批注)Meshlab查看三维点云时 ,使用技巧总结。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2938

WPF+MVVM案例实战(二十三)- 阴影效果详解

通过附加属性实现阴影效果,通过改变不同的阴影属性值达到不同阴影效果

lingshuangcanxue 559

Gtest入门2 Gtest之TEST宏的用法

Googletest宏的用法(整理)1. TestCase的介绍2. TEST宏3. TEST_F宏4. TEST_P宏5. EXPECT_*和ASSERT_*的宏介绍5.1.gtest之断言5.2. gtest断言分类5.2.1 Boolean断言类型5.2.2 二元值断言类型5.2.3 字符串断言类型6. EXPECT_CALL7. 调用测试 1. TestCase的介绍 本章节主要介绍在使用...

sevenjoin的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TEST 和 TEST_F 区别

#include  int Factorial( int n )  {   if(n==2) return 100; //故意出个错,嘻嘻   return n  }  //用TEST做简单测试  TEST(TestFactorial, ZeroInput) //第一个参数是测试用例名,第二个参数是测试名:随后的测试结果将以"测试用例名.测试名"的形式给出  {   E

wowolook的专栏 2万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Statistics】HYPOTHESIS TEST(SIGNIFICANCE TEST)

本文着重梳理 假设检验 HYPOTHESIS TEST(SIGNIFICANCE TEST),通过 逻辑性知识 和 概念性知识 两部分厘清该重点内容。 1.Logic of Hypothesis Test 1) Set up Hypothesis 2) Set up Significance level 3) Take Sample and Calculate 4) Make Conclus...

sinat_37331885的博客 1234

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【C++】googletest_TEST/TEST_F

TEST/TEST_F宏

YZJincsdn的博客 750

Google Test 使用笔记(四)TEST宏与异常

Google Test框架TEST宏与异常处理

nenchoumi3119的博客 1044
上一篇: Android sdk 本地文档加载慢的解决办法
mingming_killer
博客等级 码龄19年 18粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值