Files
whetstone_DSL/editor/tests/step1934_test.cpp

87 lines
3.2 KiB
C++
Raw Normal View History

// Step 1934: DAPCapabilityNegotiator
//
// t1: registerAdapter and supports
// t2: supportedCommands returns registered set
// t3: languagesFor returns all languages for a command
// t4: selectAdapter prefers given language; falls back to first available
// t5: unknown language/command edge cases
#include "DAPCapabilityNegotiator.h"
#include <algorithm>
#include <iostream>
namespace ws = whetstone;
static int p=0,f=0;
#define T(n) { std::cout<<" "<<#n<<"... "; }
#define P() { std::cout<<"PASS\n"; ++p; }
#define F(m) { std::cout<<"FAIL: "<<m<<"\n"; ++f; }
#define C(c,m) if(!(c)){F(m);return;}
void t1(){
T(registerAdapter_and_supports);
ws::DAPCapabilityNegotiator n;
n.registerAdapter("Python", {"stackTrace","stepIn","next"});
n.registerAdapter("Rust", {"stackTrace","next"});
C( n.supports("Python","stackTrace"), "Python stackTrace");
C( n.supports("Python","stepIn"), "Python stepIn");
C(!n.supports("Rust", "stepIn"), "Rust no stepIn");
C( n.supports("Rust", "next"), "Rust next");
P();
}
void t2(){
T(supportedCommands_returns_set);
ws::DAPCapabilityNegotiator n;
n.registerAdapter("Go", {"stackTrace","continue","stepIn"});
auto cmds = n.supportedCommands("Go");
C(cmds.size() == 3, "three commands");
C(std::find(cmds.begin(),cmds.end(),"stepIn") != cmds.end(), "stepIn present");
C(n.supportedCommands("Unknown").empty(), "unknown lang empty");
P();
}
void t3(){
T(languagesFor_all_supporting_languages);
ws::DAPCapabilityNegotiator n;
n.registerAdapter("Python", {"stackTrace","stepIn"});
n.registerAdapter("Rust", {"stackTrace","next"});
n.registerAdapter("TypeScript", {"stackTrace","stepIn","next"});
auto langsStack = n.languagesFor("stackTrace");
C(langsStack.size() == 3, "three langs for stackTrace");
auto langsStep = n.languagesFor("stepIn");
C(langsStep.size() == 2, "two langs for stepIn");
C(n.languagesFor("pause").empty(), "none for pause");
P();
}
void t4(){
T(selectAdapter_preferred_or_fallback);
ws::DAPCapabilityNegotiator n;
n.registerAdapter("Python", {"stackTrace","stepIn"});
n.registerAdapter("Rust", {"stackTrace","next"});
// preferred supports it
C(n.selectAdapter("stepIn", "Python") == "Python", "preferred Python for stepIn");
// preferred doesn't support, fallback to first that does
C(n.selectAdapter("next", "Python") == "Rust", "fallback Rust for next");
// preferred doesn't exist, fallback
C(n.selectAdapter("stackTrace","Go") != "", "fallback for unknown lang");
P();
}
void t5(){
T(unknown_language_and_command_edge_cases);
ws::DAPCapabilityNegotiator n;
n.registerAdapter("Go", {"continue"});
C(!n.supports("Unknown","continue"), "unknown lang not supported");
C( n.selectAdapter("pause","Go") == "", "no lang for unknown cmd");
C(!n.supports("Go","pause"), "Go no pause");
P();
}
int main(){
std::cout << "Step 1934: DAPCapabilityNegotiator\n";
t1(); t2(); t3(); t4(); t5();
std::cout << "\n" << p << "/" << (p+f) << " passed\n";
return f > 0 ? 1 : 0;
}