rusefi/java_tools/configuration_definition/src/test/java/com/rusefi/test/TSProjectConsumerTest.java

153 lines
6.3 KiB
Java

package com.rusefi.test;
import com.rusefi.ReaderStateImpl;
import com.rusefi.TsFileContent;
import com.rusefi.output.BaseCHeaderConsumer;
import com.rusefi.output.JavaFieldsConsumer;
import com.rusefi.output.TSProjectConsumer;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.StringBufferInputStream;
import static com.rusefi.AssertCompatibility.assertEquals;
public class TSProjectConsumerTest {
private static final String smallContent = "hello = \";\"\n" +
"world;comment\n" +
";comment2\n" +
"end\n";
@Test
public void getTsCondition() {
assertEquals("ts", TSProjectConsumer.getToken("\"HIP9011 Settings (knock sensor) (alpha version)\" @@if_ts\r\n"));
assertEquals("ts_show_hip9011", TSProjectConsumer.getToken("\"HIP9011 Settings (knock sensor) (alpha version)\" @@if_ts_show_hip9011"));
assertEquals("1", TSProjectConsumer.removeToken("1@@if_ts"));
assertEquals("12", TSProjectConsumer.removeToken("1@@if_ts 2"));
assertEquals("H2\r\n", TSProjectConsumer.removeToken("H@@if_ts 2\r\n"));
}
@Test
public void conditionalField() {
String test = "struct pid_s\n" +
"custom afr_table_t 4x4 array, U08, @OFFSET@, [4x4],\"deg\",\t {1/10}, 0, 0, 25.0, 1 \n" +
"#if LAMBDA\n" +
"\tint periodMs2;PID dTime;\"ms\", 1, 0, 0, 3000, 0\n" +
"#else\n" +
"\tint periodMs2;PID dTime;\"ms2\", 1, 0, 0, 3000, 0\n" +
"#endif\n" +
"#if LAMBDA\n" +
"afr_table_t afrTable;\t\t\n" +
"#else\n" +
"afr_table_t afrTable;\t\t\n" +
"#endif\n" +
"\tint16_t autoscale periodMs;PID dTime;\"ms\", {1/10}, 0, 0, 3000, 0\n" +
"end_struct\n" +
"";
ReaderStateImpl state = new ReaderStateImpl();
TSProjectConsumer tsProjectConsumer = new TestTSProjectConsumer("", state);
JavaFieldsConsumer javaFieldsConsumer = new TestJavaFieldsConsumer(state);
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer();
state.readBufferedReader(test, javaFieldsConsumer, consumer, tsProjectConsumer);
assertEquals("#if LAMBDA\n" +
"periodMs2 = scalar, S32, 0, \"ms\", 1, 0, 0, 3000, 0\n" +
"#else\n" +
"periodMs2 = scalar, S32, 0, \"ms2\", 1, 0, 0, 3000, 0\n" +
"#endif\n" +
"#if LAMBDA\n" +
"afrTable = array, U08, 4, [4x4],\"deg\", 0.1, 0, 0, 25.0, 1\n" +
"#else\n" +
"afrTable = array, U08, 4, [4x4],\"deg\", 0.1, 0, 0, 25.0, 1\n" +
"#endif\n" +
"periodMs = scalar, S16, 20, \"ms\", 0.1, 0, 0, 3000, 0\n" +
"; total TS size = 24\n", tsProjectConsumer.getContent());
assertEquals("\tpublic static final Field PERIODMS2 = Field.create(\"PERIODMS2\", 0, FieldType.INT).setScale(1.0).setBaseOffset(0);\n" +
"\tpublic static final Field AFRTABLE = Field.create(\"AFRTABLE\", 4, FieldType.INT).setScale(1.0).setBaseOffset(0);\n" +
"\tpublic static final Field PERIODMS = Field.create(\"PERIODMS\", 20, FieldType.INT16).setScale(0.1).setBaseOffset(0);\n" +
"\tpublic static final Field ALIGNMENTFILL_AT_22 = Field.create(\"ALIGNMENTFILL_AT_22\", 22, FieldType.INT8).setScale(1.0).setBaseOffset(0);\n",
javaFieldsConsumer.getContent());
assertEquals("// start of pid_s\n" +
"struct pid_s {\n" +
"\t/**\n" +
"\t * PID dTime\n" +
"\t * units: ms\n" +
"\t * offset 0\n" +
"\t */\n" +
"\tint periodMs2 = (int)0;\n" +
"\t/**\n" +
"\t * offset 4\n" +
"\t */\n" +
"\tafr_table_t afrTable;\n" +
"\t/**\n" +
"\t * PID dTime\n" +
"\t * units: ms\n" +
"\t * offset 20\n" +
"\t */\n" +
"\tscaled_channel<int16_t, 10, 1> periodMs = (int16_t)0;\n" +
"\t/**\n" +
"\t * need 4 byte alignment\n" +
"\t * units: units\n" +
"\t * offset 22\n" +
"\t */\n" +
"\tuint8_t alignmentFill_at_22[2];\n" +
"};\n" +
"static_assert(sizeof(pid_s) == 24);\n" +
"\n", consumer.getContent());
}
@Test
public void cppCornerCaseEmptyStruct() {
String test = "struct pid_s\n" +
"end_struct\n" +
"";
ReaderStateImpl state = new ReaderStateImpl();
TSProjectConsumer tsProjectConsumer = new TestTSProjectConsumer("", state);
JavaFieldsConsumer javaFieldsConsumer = new TestJavaFieldsConsumer(state);
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer();
state.readBufferedReader(test, javaFieldsConsumer, consumer, tsProjectConsumer);
assertEquals("; total TS size = 0\n", tsProjectConsumer.getContent());
assertEquals("", javaFieldsConsumer.getContent());
assertEquals("// start of pid_s\n" +
"struct pid_s {\n" +
"};\n" +
"static_assert(sizeof(pid_s) == 1);\n" +
"\n", consumer.getContent());
}
@Test
public void testReaderKeepComments() throws IOException {
TSProjectConsumer consumer = new TestTSProjectConsumer(null, new ReaderStateImpl());
TsFileContent content = consumer.getTsFileContent(new StringBufferInputStream(smallContent));
assertEquals(smallContent, content.getPrefix());
assertEquals("", content.getPostfix());
}
@Test
public void testReaderDropComments() throws IOException {
ReaderStateImpl state = new ReaderStateImpl();
TSProjectConsumer consumer = new TestTSProjectConsumer(null, state);
state.getVariableRegistry().put(TSProjectConsumer.TS_DROP_TEMPLATE_COMMENTS, "true");
TsFileContent content = consumer.getTsFileContent(new StringBufferInputStream(smallContent));
assertEquals("hello = \";\"\n" +
"world;comment\n" +
"end\n", content.getPrefix());
assertEquals("", content.getPostfix());
}}