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

153 lines
6.3 KiB
Java
Raw Normal View History

2019-06-01 15:27:34 -07:00
package com.rusefi.test;
2023-01-06 08:55:59 -08:00
import com.rusefi.ReaderStateImpl;
2024-03-18 06:51:18 -07:00
import com.rusefi.TsFileContent;
2021-12-11 00:54:12 -08:00
import com.rusefi.output.BaseCHeaderConsumer;
import com.rusefi.output.JavaFieldsConsumer;
2019-06-01 15:27:34 -07:00
import com.rusefi.output.TSProjectConsumer;
2023-12-15 08:29:56 -08:00
import org.junit.jupiter.api.Test;
2019-06-01 15:27:34 -07:00
2024-03-18 06:51:18 -07:00
import java.io.IOException;
import java.io.StringBufferInputStream;
2024-02-14 07:45:40 -08:00
import static com.rusefi.AssertCompatibility.assertEquals;
2019-06-01 15:27:34 -07:00
public class TSProjectConsumerTest {
2024-03-18 07:26:19 -07:00
private static final String smallContent = "hello = \";\"\n" +
"world;comment\n" +
";comment2\n" +
2024-03-18 06:51:18 -07:00
"end\n";
2019-06-01 15:27:34 -07:00
@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
2022-10-09 14:38:57 -07:00
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" +
2022-04-26 16:25:45 -07:00
"\tint16_t autoscale periodMs;PID dTime;\"ms\", {1/10}, 0, 0, 3000, 0\n" +
"end_struct\n" +
"";
2023-01-06 08:55:59 -08:00
ReaderStateImpl state = new ReaderStateImpl();
2022-04-17 11:18:30 -07:00
TSProjectConsumer tsProjectConsumer = new TestTSProjectConsumer("", state);
JavaFieldsConsumer javaFieldsConsumer = new TestJavaFieldsConsumer(state);
2021-12-11 00:54:12 -08:00
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer();
2021-12-11 00:54:12 -08:00
2022-04-15 10:53:50 -07:00
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",
2022-04-17 11:48:00 -07:00
javaFieldsConsumer.getContent());
2021-12-11 00:54:12 -08:00
assertEquals("// start of pid_s\n" +
2024-01-03 12:54:30 -08:00
"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());
}
2023-04-29 19:05:58 -07:00
@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" +
2023-04-29 19:05:58 -07:00
"\n", consumer.getContent());
}
2024-03-18 06:51:18 -07:00
@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 {
2024-03-18 07:26:19 -07:00
ReaderStateImpl state = new ReaderStateImpl();
TSProjectConsumer consumer = new TestTSProjectConsumer(null, state);
state.getVariableRegistry().put(TSProjectConsumer.TS_DROP_TEMPLATE_COMMENTS, "true");
2024-03-18 06:51:18 -07:00
TsFileContent content = consumer.getTsFileContent(new StringBufferInputStream(smallContent));
2024-03-18 07:26:19 -07:00
assertEquals("hello = \";\"\n" +
"world;comment\n" +
2024-03-18 06:51:18 -07:00
"end\n", content.getPrefix());
assertEquals("", content.getPostfix());
}}