1002 строки
17 КиБ
Go
1002 строки
17 КиБ
Go
package service
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
gomega_format "github.com/onsi/gomega/format"
|
|
)
|
|
|
|
func TestUtils(t *testing.T) {
|
|
RegisterFailHandler(Fail)
|
|
gomega_format.CharactersAroundMismatchToInclude = 50
|
|
RunSpecs(t, "Go Translator")
|
|
}
|
|
|
|
var _ = Describe("Go Translator", func() {
|
|
Describe("All", func() {
|
|
It("Empty_Package", func() {
|
|
source := `package test`
|
|
expected := `void loop(){}
|
|
void setup(){}`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_Declaration", func() {
|
|
source := `package test
|
|
func foo() {}
|
|
func bar() {}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
void bar();
|
|
|
|
void foo(){}
|
|
void bar() {}`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_Declaration_With_Args", func() {
|
|
source := `package test
|
|
func foo(x int) {}
|
|
func bar(y int) {}
|
|
`
|
|
expected := `
|
|
void foo(int x);
|
|
void bar(int y);
|
|
|
|
void foo(int x){}
|
|
void bar(int y) {}`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Const_String_Declaration", func() {
|
|
source := `package test
|
|
const foo string = "bar"
|
|
`
|
|
expected := `
|
|
const char* foo = "bar";
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("Const Int Calculated Declaration", func() {
|
|
source := `package test
|
|
const foo int = 3 - 1
|
|
`
|
|
expected := `
|
|
const int foo = 3 - 1;
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Var_String_Declaration", func() {
|
|
source := `package test
|
|
var client wifi.Client
|
|
`
|
|
expected := `
|
|
WiFiClient client;
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Const_String_Declaration", func() {
|
|
source := `package test
|
|
func foo() {
|
|
const foo string = "bar"
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
const char* foo = "bar";
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Var_String_Declaration", func() {
|
|
source := `package test
|
|
func foo() {
|
|
var foo string = "bar"
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
char* foo = "bar";
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Function_Call", func() {
|
|
source := `package test
|
|
func foo() {
|
|
bar()
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
bar();
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Function_Call_With_Args", func() {
|
|
source := `package test
|
|
func foo() {
|
|
bar(1,2,3)
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
bar(1,2,3);
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Function_Call_With_String", func() {
|
|
source := `package test
|
|
func foo() {
|
|
bar("foo")
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
bar("foo");
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Package_Function_Call", func() {
|
|
source := `package test
|
|
func foo() {
|
|
foo.Bar(1,"2")
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
foo.Bar(1,"2");
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Assignments", func() {
|
|
source := `package test
|
|
func foo() {
|
|
x = 1
|
|
y = 2
|
|
z = x + y
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
x = 1;
|
|
y = 2;
|
|
z = x + y;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Package_Selector_Assignments", func() {
|
|
source := `package test
|
|
func foo() {
|
|
x = bar()
|
|
y = pkg.Bar()
|
|
z = x + y
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
x = bar();
|
|
y = pkg.Bar();
|
|
z = x + y;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_Ident_Mapping", func() {
|
|
source := `package test
|
|
func foo() {
|
|
serial.Begin()
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
Serial.begin();
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Ident_Param", func() {
|
|
source := `package test
|
|
func foo() {
|
|
foo.Bar(1,"2",digital.Low)
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
foo.Bar(1,"2",LOW);
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_With_Function_Param", func() {
|
|
source := `package test
|
|
func foo() {
|
|
serial.Println(wifi.LocalIP())
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
|
|
void foo() {
|
|
Serial.println(WiFi.localIP());
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Function_Should_Be_Skipped", func() {
|
|
source := `package test
|
|
func foo() (s ShouldBeSkipped) {
|
|
return;
|
|
}
|
|
`
|
|
expected := ``
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Functions get declarations first", func() {
|
|
source := `package test
|
|
func foo() {
|
|
foo2()
|
|
}
|
|
func foo2() int {
|
|
return 0
|
|
}
|
|
`
|
|
expected := `
|
|
void foo();
|
|
int foo2();
|
|
|
|
void foo() {
|
|
foo2();
|
|
}
|
|
int foo2() {
|
|
return 0;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Package_Import", func() {
|
|
source := `package test
|
|
import "github.com/andygeiss/esp32-mqtt/api/controller"
|
|
import "github.com/andygeiss/esp32-mqtt/api/controller/serial"
|
|
import "github.com/andygeiss/esp32/api/controller/timer"
|
|
import wifi "github.com/andygeiss/esp32/api/controller/wifi"
|
|
`
|
|
expected := `
|
|
#include <WiFi.h>
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("Package_Import_But_Ignore_Controller", func() {
|
|
source := `package test
|
|
import controller "my/go-controller"
|
|
import "github.com/andygeiss/esp32-mqtt/api/controller/serial"
|
|
import "github.com/andygeiss/esp32/api/controller/timer"
|
|
import wifi "github.com/andygeiss/esp32/api/controller/wifi"
|
|
`
|
|
expected := `
|
|
#include <WiFi.h>
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("IfStmt_With_Condition_BasicLit_And_BasicLit", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
if 1 == 1 {
|
|
serial.Println("1")
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
if (1 == 1) {
|
|
Serial.println("1");
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("IfStmt_With_Condition_Ident_And_BasicLit", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
if x == 1 {
|
|
serial.Println("1")
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
if (x == 1) {
|
|
Serial.println("1");
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("IfStmt_With_Condition_CallExpr_And_BasicLit", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
if x() == 1 {
|
|
serial.Println("1")
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
if (x() == 1) {
|
|
Serial.println("1");
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("IfStmt_With_Condition_Const_And_BasicLit", func() {
|
|
source := `package test
|
|
const maxX = 1
|
|
func Setup() {}
|
|
func Loop() {
|
|
if x == maxX {
|
|
serial.Println("1")
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
const maxX = 1;
|
|
void setup() {}
|
|
void loop() {
|
|
if (x == maxX) {
|
|
Serial.println("1");
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("IfStmt_With_Else", func() {
|
|
source := `package test
|
|
const maxX = 1
|
|
func Setup() {}
|
|
func Loop() {
|
|
if x == maxX {
|
|
serial.Println("1")
|
|
} else {
|
|
serial.Println("2")
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
const maxX = 1;
|
|
void setup() {}
|
|
void loop() {
|
|
if (x == maxX) {
|
|
Serial.println("1");
|
|
} else {
|
|
Serial.println("2");
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("SwitchStmt_With_Ident_And_BasicLit", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
switch x {
|
|
case 1:
|
|
serial.Println("1")
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
switch (x) {
|
|
case 1:
|
|
Serial.println("1");
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("SwitchStmt_With_Break", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
switch x {
|
|
case 1:
|
|
serial.Println("1")
|
|
break
|
|
case 2:
|
|
serial.Println("1")
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
switch (x) {
|
|
case 1:
|
|
Serial.println("1");
|
|
break;
|
|
case 2:
|
|
Serial.println("1");
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("ForLoop_WithoutInit_And_Post_Transpiles_To_While", func() {
|
|
source := `package test
|
|
import wifi "github.com/andygeiss/esp32/api/controller/wifi"
|
|
func Setup() {
|
|
serial.Begin(serial.BaudRate115200)
|
|
wifi.BeginEncrypted("SSID", "PASS")
|
|
for wifi.Status() != wifi.StatusConnected {
|
|
serial.Println("Connecting ...")
|
|
}
|
|
serial.Println("Connected!")
|
|
}
|
|
func Loop() {}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
#include <WiFi.h>
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
WiFi.begin("SSID","PASS");
|
|
while(WiFi.status()!=WL_CONNECTED){
|
|
Serial.println("Connecting...");
|
|
}
|
|
Serial.println("Connected!");
|
|
}
|
|
void loop() {}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
|
|
It("WiFiWebClient", func() {
|
|
source := `package test
|
|
import wifi "github.com/andygeiss/esp32/api/controller/wifi"
|
|
var client wifi.Client
|
|
func Setup() {}
|
|
func Loop() {
|
|
serial.Print("Connecting to ")
|
|
serial.Println(host)
|
|
serial.Print(" ...")
|
|
if (client.Connect(host, 443) == true) {
|
|
serial.Println(" Connected!")
|
|
} else {
|
|
serial.Println(" Failed!")
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
#include <WiFi.h>
|
|
WiFiClient client;
|
|
voidsetup(){}
|
|
voidloop(){
|
|
Serial.print("Connecting to");
|
|
Serial.println(host);
|
|
Serial.print(" ...");
|
|
if(client.connect(host, 443) == true){
|
|
Serial.println(" Connected!");
|
|
} else {
|
|
Serial.println(" Failed!");
|
|
}
|
|
}`
|
|
Compare(source, expected)
|
|
})
|
|
})
|
|
|
|
Describe("Arduino", func() {
|
|
It("Maps constants", func() {
|
|
source := `package test
|
|
var analogInPin int = arduino.A0
|
|
func Setup() {}
|
|
func Loop() {}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
int analogInPin = A0;
|
|
void setup() {}
|
|
void loop() {}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
})
|
|
|
|
Describe("Goroutines", func() {
|
|
It("Go создаёт поток", func() {
|
|
source := `package test
|
|
func main() {
|
|
go myfunction()
|
|
}
|
|
func myfunction() {
|
|
}
|
|
`
|
|
expected := `
|
|
void main();
|
|
void myfunction();
|
|
void __GoHelper_myfunction(void*) {
|
|
myfunction();
|
|
vTaskDelete(NULL);
|
|
}
|
|
|
|
void main() {
|
|
xTaskCreate(__GoHelper_myfunction,"",1024,NULL,1,NULL);
|
|
}
|
|
void myfunction() {
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("Go создаёт поток - два раза", func() {
|
|
source := `package test
|
|
func main() {
|
|
go myfunction()
|
|
go myfunction2()
|
|
}
|
|
func myfunction() {
|
|
}
|
|
func myfunction2() {
|
|
}
|
|
`
|
|
expected := `
|
|
void main();
|
|
void myfunction();
|
|
void myfunction2();
|
|
void __GoHelper_myfunction(void*) {
|
|
myfunction();
|
|
vTaskDelete(NULL);
|
|
}
|
|
void __GoHelper_myfunction2(void*) {
|
|
myfunction2();
|
|
vTaskDelete(NULL);
|
|
}
|
|
|
|
void main() {
|
|
xTaskCreate(__GoHelper_myfunction,"",1024,NULL,1,NULL);
|
|
xTaskCreate(__GoHelper_myfunction2,"",1024,NULL,1,NULL);
|
|
}
|
|
void myfunction() {
|
|
}
|
|
void myfunction2() {
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
})
|
|
|
|
Describe("Функции", func() {
|
|
It("Объявление void функции", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
}
|
|
|
|
func MyFunction() {
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
void MyFunction();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
}
|
|
void MyFunction() {
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("Объявление void функции с return", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
}
|
|
|
|
func MyFunction() {
|
|
return
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
void MyFunction();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
}
|
|
void MyFunction() {
|
|
return;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("Объявление int функции", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
}
|
|
|
|
func MyFunction() int {
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
int MyFunction();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
}
|
|
int MyFunction() {
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("Объявление int функции с return 0", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
}
|
|
|
|
func MyFunction() int {
|
|
return 0
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
int MyFunction();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
}
|
|
int MyFunction() {
|
|
return 0;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("Объявление int функции с return -1", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
}
|
|
|
|
func MyFunction() int {
|
|
return -1
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
int MyFunction();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
}
|
|
int MyFunction() {
|
|
return -1;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("Объявляет и вызывает функцию", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
var x int = MyFunction()
|
|
}
|
|
|
|
func MyFunction() int {
|
|
return 0
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
int MyFunction();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
int x = MyFunction();
|
|
}
|
|
int MyFunction() {
|
|
return 0;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("Объявление bool функции с return false", func() {
|
|
source := `package test
|
|
func MyFunction() bool {
|
|
return false
|
|
}
|
|
`
|
|
expected := `
|
|
bool MyFunction();
|
|
|
|
bool MyFunction() {
|
|
return false;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
})
|
|
|
|
Describe("Циклы", func() {
|
|
It("for {}", func() {
|
|
source := `package test
|
|
func Loop() {
|
|
var i int
|
|
for {
|
|
i = i
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void loop();
|
|
|
|
void loop() {
|
|
int i;
|
|
while (1) {
|
|
i = i;
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("for i=0; i<10; i+=1", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
var i int
|
|
for i=0; i<10; i+=1 {
|
|
i = i
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
int i;
|
|
for (i=0; i<10; i+=1) {
|
|
i = i;
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("for i=0; i<10; i++", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
var i int
|
|
for i=0; i<10; i++ {
|
|
i = i
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
int i;
|
|
for (i=0; i<10; i++) {
|
|
i = i;
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("for { continue }", func() {
|
|
source := `package test
|
|
func Setup() {}
|
|
func Loop() {
|
|
for {
|
|
if v == 0 {
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void setup();
|
|
void loop();
|
|
|
|
void setup() {}
|
|
void loop() {
|
|
while (1) {
|
|
if (v == 0) {
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
})
|
|
Describe("Действия", func() {
|
|
It("nil -> NULL", func() {
|
|
source := `package test
|
|
func Loop() {
|
|
if p == nil {
|
|
}
|
|
}
|
|
`
|
|
expected := `
|
|
void loop();
|
|
|
|
void loop() {
|
|
if (p == NULL) {
|
|
}
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("uint32 -> unsigned long", func() {
|
|
source := `package test
|
|
func Loop() {
|
|
var i uint32
|
|
}
|
|
`
|
|
expected := `
|
|
void loop();
|
|
|
|
void loop() {
|
|
unsigned long i;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("uint64 -> unsigned long long", func() {
|
|
source := `package test
|
|
func Loop() {
|
|
var i uint64
|
|
}
|
|
`
|
|
expected := `
|
|
void loop();
|
|
|
|
void loop() {
|
|
unsigned long long i;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
It("i++", func() {
|
|
source := `package test
|
|
func Loop() {
|
|
var i int
|
|
i++
|
|
}
|
|
`
|
|
expected := `
|
|
void loop();
|
|
|
|
void loop() {
|
|
int i;
|
|
i++;
|
|
}
|
|
`
|
|
Compare(source, expected)
|
|
})
|
|
})
|
|
})
|
|
|
|
func Compare(source, expected string) {
|
|
var in, out bytes.Buffer
|
|
in.WriteString(source)
|
|
service := NewService(&in, &out)
|
|
err := service.Start()
|
|
got := out.String()
|
|
tgot, texpected := Trim(got), Trim(expected)
|
|
// spew.Dump(tgot)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
ExpectWithOffset(1, tgot).To(Be(texpected))
|
|
}
|
|
|
|
func Trim(s string) string {
|
|
s = strings.Replace(s, " ", "", -1)
|
|
s = strings.Replace(s, "\n", "", -1)
|
|
s = strings.Replace(s, "\r", "", -1)
|
|
s = strings.Replace(s, "\t", "", -1)
|
|
return s
|
|
}
|
|
|
|
func NDescribe(s string, i func()) int { return 0 }
|
|
func NIt(s string, i func()) int { return 0 }
|