THM1176InstrumentManager 1.1
Qt Object abstraction for Metrolab THM1176
Loading...
Searching...
No Matches
IEEE488InstrumentReadWriteTest.h
Go to the documentation of this file.
1// Copyright (c) 2020 Metrolab Technology S.A., Geneva, Switzerland (www.metrolab.com)
2// See the included file LICENSE.txt for the licensing conditions.
3
7
8#pragma once
9
10#include <gtest/gtest.h>
11
13
14using namespace testing;
15
16class IEEE488InstrumentReadWriteTest : public ::testing::Test
17{
18protected:
19 static IEEE4888_TEST_RESOURCE_MANAGER_CLASS * pResourceManager;
20 static IEEE4888_TEST_INSTRUMENT_CLASS * pInstrument;
21
22 static void SetUpTestCase()
23 {
25 ASSERT_NE(nullptr, pResourceManager);
26 ASSERT_NE(nullptr, pInstrument);
27 ASSERT_EQ(true, pInstrument->IsOpen());
28 ASSERT_EQ(true, pInstrument->Clear());
29 }
30
31 static void TearDownTestCase()
32 {
33 delete pInstrument;
34 pInstrument = nullptr;
35 delete pResourceManager;
36 pResourceManager = nullptr;
37 }
38};
39
40IEEE4888_TEST_RESOURCE_MANAGER_CLASS * IEEE488InstrumentReadWriteTest::pResourceManager = nullptr;
41IEEE4888_TEST_INSTRUMENT_CLASS * IEEE488InstrumentReadWriteTest::pInstrument = nullptr;
42
44TEST_F(IEEE488InstrumentReadWriteTest, IDN_Query_WriteCString)
45{
46 ASSERT_EQ(true, pInstrument->Write ("*IDN?"));
47 CSCPIBuffer l_Buffer;
48 ASSERT_EQ(true, pInstrument->Read (l_Buffer));
49 EXPECT_EQ(true, CheckIDNResponse (l_Buffer));
50
51}
52
54TEST_F(IEEE488InstrumentReadWriteTest, IDN_Query_WriteCPPString)
55{
56 ASSERT_EQ(true, pInstrument->Write (std::string("*IDN?")));
57 CSCPIBuffer l_Buffer;
58 ASSERT_EQ(true, pInstrument->Read (l_Buffer));
59 EXPECT_EQ(true, CheckIDNResponse (l_Buffer));
60
61}
62
64TEST_F(IEEE488InstrumentReadWriteTest, IDN_Query_WriteSCPIBuffer)
65{
66 const char * l_Command = "*IDN?";
67 CSCPIBuffer l_CmdBuffer(l_Command, std::strlen(l_Command));
68 ASSERT_EQ(true, pInstrument->Write (l_CmdBuffer));
69 CSCPIBuffer l_Buffer;
70 ASSERT_EQ(true, pInstrument->Read (l_Buffer));
71 EXPECT_EQ(true, CheckIDNResponse (l_Buffer));
72
73}
74
76TEST_F(IEEE488InstrumentReadWriteTest, IDN_Query_MultipleBuffers)
77{
78 CSCPIBuffer l_Buffer(16);
79 ASSERT_EQ(true, pInstrument->Write ("*IDN?"));
80
81 ASSERT_EQ(true, pInstrument->Read (l_Buffer, false));
82 for (;;)
83 {
84 U16 l_Status;
85 ASSERT_EQ(true, pInstrument->ReadSTB (l_Status));
86 if ((l_Status & 0x0010) == 0) break;
87 ASSERT_EQ(true, pInstrument->Read (l_Buffer, true));
88 }
89
90 EXPECT_EQ(true, CheckIDNResponse(l_Buffer));
91
92}
93
95TEST_F(IEEE488InstrumentReadWriteTest, IDN_Query_AfterSpuriousRead)
96{
97 // Perform a spurious read.
98 CSCPIBuffer l_Buffer;
99 ASSERT_EQ(false, pInstrument->Read (l_Buffer));
100 ASSERT_EQ(true, pInstrument->Timeout());
101
102 // Perform the *IDN? query.
103 ASSERT_EQ(true, pInstrument->Write ("*IDN?"));
104 ASSERT_EQ(false, pInstrument->Timeout());
105 ASSERT_EQ(true, pInstrument->Read (l_Buffer));
106 ASSERT_EQ(false, pInstrument->Timeout());
107 EXPECT_EQ(true, CheckIDNResponse (l_Buffer));
108
109}
110
112TEST_F(IEEE488InstrumentReadWriteTest, IDN_Query_AfterFailedWrite)
113{
114 // Write a long command with a very short timeout.
115 std::string l_LongCommand;
116 for (int i = 0; i < 1000; i++)
117 l_LongCommand += "*SRE 0;";
118 U32 l_Timeout = pInstrument->GetTimeout();
119 pInstrument->SetTimeout(1ul);
120 ASSERT_EQ(false, pInstrument->Write (l_LongCommand));
121 ASSERT_EQ(true, pInstrument->Timeout());
122
123 // Restore the default timeout and perform the *IDN? query.
124 pInstrument->SetTimeout(l_Timeout);
125 ASSERT_EQ(true, pInstrument->Write ("*IDN?"));
126 ASSERT_EQ(false, pInstrument->Timeout());
127 CSCPIBuffer l_Buffer;
128 ASSERT_EQ(true, pInstrument->Read (l_Buffer));
129 ASSERT_EQ(false, pInstrument->Timeout());
130 EXPECT_EQ(true, CheckIDNResponse (l_Buffer));
131
132}
133
TEST_F(IEEE488InstrumentReadWriteTest, IDN_Query_WriteCString)
Test *IDN? query with C string variant of Write.
bool ConnectToIEEE488Instrument(IEEE4888_TEST_RESOURCE_MANAGER_CLASS *&rpResourceManager, IEEE4888_TEST_INSTRUMENT_CLASS *&rpInstrument)
Connect to an IEEE488Instrument.
bool CheckIDNResponse(const CSCPIBuffer &rBuffer)
Sanity-check of the response to an *IDN? query.
Utility functions used to test IEEE488Instrument API.
unsigned int U32
32-bit unsigned integer.
Definition OSDefines.h:31
unsigned short U16
16-bit unsigned integer.
Definition OSDefines.h:30
static IEEE4888_TEST_INSTRUMENT_CLASS * pInstrument
static IEEE4888_TEST_RESOURCE_MANAGER_CLASS * pResourceManager