mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	testeth: fix --singletest option
This commit is contained in:
		
							parent
							
								
									6cce9710e5
								
							
						
					
					
						commit
						f7109717ed
					
				| @ -549,58 +549,50 @@ void checkCallCreates(eth::Transactions _resultCallCreates, eth::Transactions _e | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void userDefinedTest(string testTypeFlag, std::function<void(json_spirit::mValue&, bool)> doTests) | void userDefinedTest(std::function<void(json_spirit::mValue&, bool)> doTests) | ||||||
| { | { | ||||||
| 	Options::get(); // parse command line options, e.g. to enable JIT
 | 	if (!Options::get().singleTest) | ||||||
| 
 |  | ||||||
| 	for (int i = 1; i < boost::unit_test::framework::master_test_suite().argc; ++i) |  | ||||||
| 	{ | 	{ | ||||||
| 		string arg = boost::unit_test::framework::master_test_suite().argv[i]; | 		cnote << "Missing user test specification\nUsage: testeth --singletest <filename> <testname>\n"; | ||||||
| 		if (arg == testTypeFlag) | 		return; | ||||||
| 		{ |  | ||||||
| 			if (boost::unit_test::framework::master_test_suite().argc <= i + 2) |  | ||||||
| 			{ |  | ||||||
| 				cnote << "Missing filename\nUsage: testeth " << testTypeFlag << " <filename> <testname>\n"; |  | ||||||
| 				return; |  | ||||||
| 			} |  | ||||||
| 			string filename = boost::unit_test::framework::master_test_suite().argv[i + 1]; |  | ||||||
| 			string testname = boost::unit_test::framework::master_test_suite().argv[i + 2]; |  | ||||||
| 			int currentVerbosity = g_logVerbosity; |  | ||||||
| 			g_logVerbosity = 12; |  | ||||||
| 			try |  | ||||||
| 			{ |  | ||||||
| 				cnote << "Testing user defined test: " << filename; |  | ||||||
| 				json_spirit::mValue v; |  | ||||||
| 				string s = asString(contents(filename)); |  | ||||||
| 				BOOST_REQUIRE_MESSAGE(s.length() > 0, "Contents of " + filename + " is empty. "); |  | ||||||
| 				json_spirit::read_string(s, v); |  | ||||||
| 				json_spirit::mObject oSingleTest; |  | ||||||
| 
 |  | ||||||
| 				json_spirit::mObject::const_iterator pos = v.get_obj().find(testname); |  | ||||||
| 				if (pos == v.get_obj().end()) |  | ||||||
| 				{ |  | ||||||
| 					cnote << "Could not find test: " << testname << " in " << filename << "\n"; |  | ||||||
| 					return; |  | ||||||
| 				} |  | ||||||
| 				else |  | ||||||
| 					oSingleTest[pos->first] = pos->second; |  | ||||||
| 
 |  | ||||||
| 				json_spirit::mValue v_singleTest(oSingleTest); |  | ||||||
| 				doTests(v_singleTest, false); |  | ||||||
| 			} |  | ||||||
| 			catch (Exception const& _e) |  | ||||||
| 			{ |  | ||||||
| 				BOOST_ERROR("Failed Test with Exception: " << diagnostic_information(_e)); |  | ||||||
| 				g_logVerbosity = currentVerbosity; |  | ||||||
| 			} |  | ||||||
| 			catch (std::exception const& _e) |  | ||||||
| 			{ |  | ||||||
| 				BOOST_ERROR("Failed Test with Exception: " << _e.what()); |  | ||||||
| 				g_logVerbosity = currentVerbosity; |  | ||||||
| 			} |  | ||||||
| 			g_logVerbosity = currentVerbosity; |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	auto& filename = Options::get().singleTestFile; | ||||||
|  | 	auto& testname = Options::get().singleTestName; | ||||||
|  | 	int currentVerbosity = g_logVerbosity; | ||||||
|  | 	g_logVerbosity = 12; | ||||||
|  | 	try | ||||||
|  | 	{ | ||||||
|  | 		cnote << "Testing user defined test: " << filename; | ||||||
|  | 		json_spirit::mValue v; | ||||||
|  | 		string s = asString(contents(filename)); | ||||||
|  | 		BOOST_REQUIRE_MESSAGE(s.length() > 0, "Contents of " + filename + " is empty. "); | ||||||
|  | 		json_spirit::read_string(s, v); | ||||||
|  | 		json_spirit::mObject oSingleTest; | ||||||
|  | 
 | ||||||
|  | 		json_spirit::mObject::const_iterator pos = v.get_obj().find(testname); | ||||||
|  | 		if (pos == v.get_obj().end()) | ||||||
|  | 		{ | ||||||
|  | 			cnote << "Could not find test: " << testname << " in " << filename << "\n"; | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		else | ||||||
|  | 			oSingleTest[pos->first] = pos->second; | ||||||
|  | 
 | ||||||
|  | 		json_spirit::mValue v_singleTest(oSingleTest); | ||||||
|  | 		doTests(v_singleTest, false); | ||||||
|  | 	} | ||||||
|  | 	catch (Exception const& _e) | ||||||
|  | 	{ | ||||||
|  | 		BOOST_ERROR("Failed Test with Exception: " << diagnostic_information(_e)); | ||||||
|  | 		g_logVerbosity = currentVerbosity; | ||||||
|  | 	} | ||||||
|  | 	catch (std::exception const& _e) | ||||||
|  | 	{ | ||||||
|  | 		BOOST_ERROR("Failed Test with Exception: " << _e.what()); | ||||||
|  | 		g_logVerbosity = currentVerbosity; | ||||||
|  | 	} | ||||||
|  | 	g_logVerbosity = currentVerbosity; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void executeTests(const string& _name, const string& _testPathAppendix, const boost::filesystem::path _pathToFiller, std::function<void(json_spirit::mValue&, bool)> doTests) | void executeTests(const string& _name, const string& _testPathAppendix, const boost::filesystem::path _pathToFiller, std::function<void(json_spirit::mValue&, bool)> doTests) | ||||||
| @ -740,10 +732,11 @@ Options::Options() | |||||||
| 			inputLimits = true; | 			inputLimits = true; | ||||||
| 			bigData = true; | 			bigData = true; | ||||||
| 		} | 		} | ||||||
| 		else if (arg == "--singletest" && i + 1 < argc) | 		else if (arg == "--singletest" && i + 2 < argc) | ||||||
| 		{ | 		{ | ||||||
| 			singleTest = true; | 			singleTest = true; | ||||||
| 			singleTestName = argv[i + 1]; | 			singleTestFile = argv[i + 1]; | ||||||
|  | 			singleTestName = argv[i + 2]; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -157,7 +157,7 @@ void checkLog(eth::LogEntries _resultLogs, eth::LogEntries _expectedLogs); | |||||||
| void checkCallCreates(eth::Transactions _resultCallCreates, eth::Transactions _expectedCallCreates); | void checkCallCreates(eth::Transactions _resultCallCreates, eth::Transactions _expectedCallCreates); | ||||||
| 
 | 
 | ||||||
| void executeTests(const std::string& _name, const std::string& _testPathAppendix, const boost::filesystem::path _pathToFiller, std::function<void(json_spirit::mValue&, bool)> doTests); | void executeTests(const std::string& _name, const std::string& _testPathAppendix, const boost::filesystem::path _pathToFiller, std::function<void(json_spirit::mValue&, bool)> doTests); | ||||||
| void userDefinedTest(std::string testTypeFlag, std::function<void(json_spirit::mValue&, bool)> doTests); | void userDefinedTest(std::function<void(json_spirit::mValue&, bool)> doTests); | ||||||
| RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject& _tObj); | RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject& _tObj); | ||||||
| eth::LastHashes lastHashes(u256 _currentBlockNumber); | eth::LastHashes lastHashes(u256 _currentBlockNumber); | ||||||
| json_spirit::mObject fillJsonWithState(eth::State _state); | json_spirit::mObject fillJsonWithState(eth::State _state); | ||||||
| @ -189,6 +189,7 @@ public: | |||||||
| 	/// Test selection
 | 	/// Test selection
 | ||||||
| 	/// @{
 | 	/// @{
 | ||||||
| 	bool singleTest = false; | 	bool singleTest = false; | ||||||
|  | 	std::string singleTestFile; | ||||||
| 	std::string singleTestName; | 	std::string singleTestName; | ||||||
| 	bool performance = false; | 	bool performance = false; | ||||||
| 	bool quadratic = false; | 	bool quadratic = false; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user