From 6ef016caa661099b0adf9c3c008f193c73816ad6 Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Tue, 10 Dec 2024 14:53:52 +0000 Subject: [PATCH] testing the open public proxy wrapper and it is failing --- developer/config/logback.xml | 18 ++++ .../javac\360\237\226\211/Mosaic_Logger.java" | 66 +++++++++++++ .../Mosaic_Testbench.java" | 6 +- .../javac\360\237\226\211/Mosaic_Util.java" | 83 ++++++---------- "developer/tool\360\237\226\211/env" | 15 ++- "developer/tool\360\237\226\211/make" | 15 +-- "developer/tool\360\237\226\211/release" | 69 ++++++++++--- "document\360\237\226\211/todo.txt" | 14 +++ release/Mosaic.jar | Bin 13996 -> 9941 bytes tester/config/logback.xml | 18 ++++ .../Test_Util_proxy.java" | 93 ++++++++++++++++++ tester/jvm/Test_Mosaic.jar | Bin 7738 -> 11845 bytes .../tool\360\237\226\211/bash_wrapper_list" | 5 +- .../clean_build_directories" | 5 - "tester/tool\360\237\226\211/env" | 32 +++++- "tester/tool\360\237\226\211/make" | 4 +- "tester/tool\360\237\226\211/run_jdb" | 2 +- "tester/tool\360\237\226\211/run_tests" | 10 +- "tool_shared/bespoke\360\237\226\211/env" | 4 +- .../document\360\237\226\211/install.txt" | 9 ++ 20 files changed, 355 insertions(+), 113 deletions(-) create mode 100644 developer/config/logback.xml create mode 100644 "developer/javac\360\237\226\211/Mosaic_Logger.java" create mode 100644 tester/config/logback.xml create mode 100644 "tester/javac\360\237\226\211/Test_Util_proxy.java" rename "tester/tool\360\237\226\211/shell_wrapper_list" => "tester/tool\360\237\226\211/bash_wrapper_list" (64%) diff --git a/developer/config/logback.xml b/developer/config/logback.xml new file mode 100644 index 0000000..3472b66 --- /dev/null +++ b/developer/config/logback.xml @@ -0,0 +1,18 @@ + + + + + + test_log.txt + true + + %d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + diff --git "a/developer/javac\360\237\226\211/Mosaic_Logger.java" "b/developer/javac\360\237\226\211/Mosaic_Logger.java" new file mode 100644 index 0000000..50d1f92 --- /dev/null +++ "b/developer/javac\360\237\226\211/Mosaic_Logger.java" @@ -0,0 +1,66 @@ +package com.ReasoningTechnology.Mosaic; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.Instant; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; + +public class Mosaic_Logger { + + private static final Logger LOGGER = LoggerFactory.getLogger(Mosaic_Logger.class); + private static final DateTimeFormatter ISO_UTC_FORMATTER = + DateTimeFormatter.ISO_INSTANT.withZone(ZoneOffset.UTC); + + // Formats and logs an output related to a specific test + public static void output(String test_name, String stream, String output_data) { + String timestamp = iso_utc_time(); + String formatted_log = String.format( + "\n%s -----------------------------------------------------------\n" + + "Test: %s\n" + + "Stream: %s\n" + + "Output:\n%s\n", + timestamp, test_name, stream, output_data + ); + + LOGGER.info(formatted_log); + } + + // Logs a general message for a test + public static void message(String test_name, String message) { + String timestamp = iso_utc_time(); + String formatted_log = String.format( + "\n%s -----------------------------------------------------------\n" + + "Test: %s\n" + + "Message:\n%s\n", + timestamp, test_name, message + ); + + LOGGER.info(formatted_log); + } + + // Logs an error with stack trace + public static void error(String test_name, String message, Throwable error) { + String timestamp = iso_utc_time(); + StringBuilder stack_trace = new StringBuilder(); + for (StackTraceElement element : error.getStackTrace()) { + stack_trace.append(element.toString()).append("\n"); + } + + String formatted_log = String.format( + "\n%s -----------------------------------------------------------\n" + + "Test: %s\n" + + "Message:\n%s\n" + + "Error:\n%s\n", + timestamp, test_name, message, stack_trace + ); + + LOGGER.error(formatted_log); + } + + // Utility to fetch the current time in ISO UTC format + private static String iso_utc_time() { + return ISO_UTC_FORMATTER.format(Instant.now()); + } +} diff --git "a/developer/javac\360\237\226\211/Mosaic_Testbench.java" "b/developer/javac\360\237\226\211/Mosaic_Testbench.java" index c8e0644..777233f 100644 --- "a/developer/javac\360\237\226\211/Mosaic_Testbench.java" +++ "b/developer/javac\360\237\226\211/Mosaic_Testbench.java" @@ -49,7 +49,7 @@ public class Mosaic_Testbench { if(successful_redirect){ io.clear_buffers(); // Start each test with empty buffers } else { - Mosaic_Util.log_message(test_name, "Error: I/O redirection failed before running the test."); + Mosaic_Logger.message(test_name, "Error: I/O redirection failed before running the test."); System.out.println("Warning: Failed to redirect I/O for test: " + test_name); } @@ -71,11 +71,11 @@ public class Mosaic_Testbench { if(fail_exception) System.out.println("Test failed: '" + test_name + "' threw an exception: " + exception_string); if(fail_extraneous_stdout){ System.out.println("Test failed: '" + test_name + "' produced extraneous stdout."); - Mosaic_Util.log_output(test_name, "stdout", io.get_out_content()); + Mosaic_Logger.output(test_name, "stdout", io.get_out_content()); } if(fail_extraneous_stderr){ System.out.println("Test failed: '" + test_name + "' produced extraneous stderr."); - Mosaic_Util.log_output(test_name, "stderr", io.get_err_content()); + Mosaic_Logger.output(test_name, "stderr", io.get_err_content()); } // Determine final test result diff --git "a/developer/javac\360\237\226\211/Mosaic_Util.java" "b/developer/javac\360\237\226\211/Mosaic_Util.java" index bb6474f..ede4fca 100644 --- "a/developer/javac\360\237\226\211/Mosaic_Util.java" +++ "b/developer/javac\360\237\226\211/Mosaic_Util.java" @@ -5,6 +5,9 @@ import java.io.ByteArrayOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -14,7 +17,6 @@ import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.function.Predicate; - public class Mosaic_Util{ // Linear search with a predicate @@ -55,72 +57,43 @@ public class Mosaic_Util{ return Instant.now().atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT); } - // used to report if a test completed with data still on an output streams - public static void log_output(String test_name ,String stream ,String output_data){ - try(FileWriter log_writer = new FileWriter("test_log.txt" ,true)){ // Append mode - log_writer.write("\n" + iso_utc_time() + " -----------------------------------------------------------\n"); - log_writer.write("Test: " + test_name + "\n"); - log_writer.write("Stream: " + stream + "\n"); - log_writer.write("Output:\n" + output_data + "\n"); - } catch(IOException e) { - System.err.println("Error writing to log for test: " + test_name + ", stream: " + stream); - e.printStackTrace(System.err); - } - } - - // used to log a general message about a test - public static void log_message(String test_name ,String message){ - try(FileWriter log_writer = new FileWriter("test_log.txt" ,true)){ // Append mode - log_writer.write("\n" + iso_utc_time() + " -----------------------------------------------------------\n"); - log_writer.write("Test: " + test_name + "\n"); - log_writer.write("Message:\n" + message + "\n"); - } catch(IOException e){ - System.err.println - ( - "Error writing message \"" - + message - + "\" to log for test \'" - + test_name - + "\'" - ); - e.printStackTrace(System.err); - } - } - - public static Object make_all_public_methods_proxy( Class class_metadata ) { + public static Object make_all_public_proxy( Class class_metadata ) { try { - // Check if the class is public - int modifiers = class_metadata.getModifiers(); - if (!java.lang.reflect.Modifier.isPublic( modifiers )) { - throw new IllegalAccessException( - "The class " + class_metadata.getName() + " is not public and cannot be proxied." + // Validate that the class implements at least one interface + if( class_metadata.getInterfaces().length == 0 ) { + throw new IllegalArgumentException( + "The class " + class_metadata.getName() + " does not implement any interfaces." ); } - // Create the proxy - Object proxy = java.lang.reflect.Proxy.newProxyInstance( - class_metadata.getClassLoader() - ,class_metadata.getInterfaces() - ,(proxy_object ,method ,args) -> { - Method original_method = class_metadata.getDeclaredMethod( - method.getName() - ,method.getParameterTypes() - ); - original_method.setAccessible( true ); - Object real_instance = class_metadata.getDeclaredConstructor().newInstance(); - return original_method.invoke( real_instance ,args ); + Object proxy = Proxy.newProxyInstance( + class_metadata.getClassLoader() + ,class_metadata.getInterfaces() + ,(proxy_object ,method ,args) -> { + // Ensure the target method is accessible + Method target_method = class_metadata.getDeclaredMethod( + method.getName() + ,method.getParameterTypes() + ); + target_method.setAccessible( true ); + + // Create an instance of the target class + Object real_instance = class_metadata.getDeclaredConstructor().newInstance(); + + // Invoke the target method + return target_method.invoke( real_instance ,args ); } ); return proxy; - } catch (Exception e) { + } catch( Throwable e ) { + // Log the error to assist with debugging + Mosaic_Logger.message( "make_all_public_proxy" ,"Failed to create proxy: " + e.getMessage() ); throw new RuntimeException( - "Failed to create proxy for class: " + class_metadata.getName() - ,e + "Failed to create proxy for class: " + class_metadata.getName() ,e ); } } - } diff --git "a/developer/tool\360\237\226\211/env" "b/developer/tool\360\237\226\211/env" index 630b7f6..728e0cd 100644 --- "a/developer/tool\360\237\226\211/env" +++ "b/developer/tool\360\237\226\211/env" @@ -24,14 +24,21 @@ export PATH=\ :"$JAVA_HOME"/bin\ :"$PATH" -# so we can run the stuff we built locally. +# for the developers ad hoc testing +# export CLASSPATH=\ -"$REPO_HOME"/developer/jvm\ -:"$REPO_HOME"/developer/jvm/"$PROJECT".jar\ -:"$JAVA_HOME"/lib\ +"$JAVA_HOME"/lib\ +:"$REPO_HOME"/developer/config\ +:"$REPO_HOME"/developer/scratchpad\ +:"$LOGGER_FACADE"\ +:"$LOGGER"\ :"$CLASSPATH" +export SOURCEPATH=\ +"$REPO_HOME"/developer/javac🖉/\ +:"$SOURCEPATH" + export PATH=\ "$REPO_HOME"/developer/bash\ :"$PATH" diff --git "a/developer/tool\360\237\226\211/make" "b/developer/tool\360\237\226\211/make" index 64602b6..df1ed8e 100755 --- "a/developer/tool\360\237\226\211/make" +++ "b/developer/tool\360\237\226\211/make" @@ -13,26 +13,13 @@ script_afp=$(realpath "${BASH_SOURCE[0]}") echo "Compiling files..." set -x - javac -g -d scratchpad javac🖉/*.java + javac -Xlint:deprecation -g -d scratchpad javac🖉/*.java set +x if [ $? -ne 0 ]; then echo "Compilation failed." exit 1 fi -echo "Creating JAR file..." - set -x - jar_file=jvm/"$PROJECT".jar - mkdir -p jvm - jar cf $jar_file -C scratchpad . - set +x - if [ $? -eq 0 ]; then - echo "JAR file created successfully: $jar_file" - else - echo "Failed to create JAR file." - exit 1 - fi - echo "Creating bash wrappers..." mkdir -p bash # wrapper is a space separated list diff --git "a/developer/tool\360\237\226\211/release" "b/developer/tool\360\237\226\211/release" index 81966ad..b798889 100755 --- "a/developer/tool\360\237\226\211/release" +++ "b/developer/tool\360\237\226\211/release" @@ -10,23 +10,28 @@ script_afp=$(realpath "${BASH_SOURCE[0]}") env_must_be="developer/tool🖉/env" if [ "$ENV" != "$env_must_be" ]; then - echo "$(script_fp):: error: must be run in the $env_must_be environment" + echo "$(script_fp):: must be run in the $env_must_be environment" exit 1 fi -# script local environment + cd "$REPO_HOME"/developer - release_dir="$REPO_HOME/release" - bash_dir="$REPO_HOME/developer/bash" - project_jar_fp="$REPO_HOME/developer/jvm/"$PROJECT".jar" - wrapper=$(bash_wrapper_list) + if [ ! -d scratchpad ]; then + echo "$(script_fp):: no scratchpad directory" + exit 1 + fi - if [ ! -d "$release_dir" ]; then - mkdir -p "$release_dir" - fi +# Inform the user + + echo "The pwd for this script is `pwd`." + echo "Expanding .jar files to be included with Mosaic into scratchpad." + echo "Gathering all the contents of scrathpad into jvm/\$PROJECT.jar" + echo "Will copy jvm/\$PROJECT.jar and other files for release to ../release" + echo "..." + +# Function to copy and set permissions - # Function to copy and set permissions install_file() { source_fp="$1" target_dp="$2" @@ -46,17 +51,49 @@ script_afp=$(realpath "${BASH_SOURCE[0]}") echo "Installed $(basename "$source_fp") to $target_dp with permissions $perms" fi } - -# do the release - echo "Starting release process..." +# script local environment + + release_dir="$REPO_HOME/release" + bash_dir="$REPO_HOME/developer/bash" + project_jar_fp="$REPO_HOME/developer/jvm/"$PROJECT".jar" + wrapper=$(bash_wrapper_list) + + mkdir -p "$release_dir" + mkdir -p jvm + +# third party tools to be included + + third_party_jars=( + "$LOGGER_FACADE" + "$LOGGER" + ) + + for jar in "${third_party_jars[@]}"; do + if [ -f "$jar" ]; then + set -x + jar -xf "$jar" -C scratchpad + set +x + else + echo "Warning: JAR file not found: $jar" + fi + done + + jar_file=jvm/"$PROJECT".jar + set -x + jar cf $jar_file -C scratchpad . + set +x + if [ $? -ne 0 ]; then + echo "Failed to create $jar_file file." + exit 1 + fi + +# move files to the release dir - # Install the JAR file install_file "$project_jar_fp" "$release_dir" "ug+r" - # Install bash wrappers for wrapper in $wrapper; do - install_file "$bash_dir/$wrapper" "$release_dir" "ug+r+x" + install_file "$bash_dir"/"$wrapper" "$release_dir" "ug+r+x" done echo "$(script_fp) done." diff --git "a/document\360\237\226\211/todo.txt" "b/document\360\237\226\211/todo.txt" index 06f2ba3..13f03a5 100644 --- "a/document\360\237\226\211/todo.txt" +++ "b/document\360\237\226\211/todo.txt" @@ -25,3 +25,17 @@ to the 'resource' project and plan to deprecate it. 7. should check stdin for unused input and report error also. 8. move 'unlock_class` from Ariadne tests to Mosaic_Util. + +9. consider adding Maven for the third party tools dependencies. + +10. really should move the developer/release 'install' script to the bespoke🖉/env script + +2024-12-10T14:25:40Z + + Gives an error, but still passes? Is this right? + ... Running Test_Testbench + Expected output: Structural problem message for dummy_invalid_return_method. + Structural problem: dummy_invalid_return_method does not return Boolean. + Test_Testbench Total tests run: 3 + Test_Testbench Total tests passed: 3 + Test_Testbench Total tests failed: 0 diff --git a/release/Mosaic.jar b/release/Mosaic.jar index 098f5815c9fd7dc3e13204543b2d5cc07ec412f2..1e2f3fd9bdd2acbd9069dede99830b3154d5018a 100644 GIT binary patch delta 6493 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 delta 10392 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≪)uu<$$P=z$NrE3&wN0IP4?hjijFObyf29OH>E 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 G+y4Xc)`<)N diff --git a/tester/config/logback.xml b/tester/config/logback.xml new file mode 100644 index 0000000..3472b66 --- /dev/null +++ b/tester/config/logback.xml @@ -0,0 +1,18 @@ + + + + + + test_log.txt + true + + %d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + diff --git "a/tester/javac\360\237\226\211/Test_Util_proxy.java" "b/tester/javac\360\237\226\211/Test_Util_proxy.java" new file mode 100644 index 0000000..5e42277 --- /dev/null +++ "b/tester/javac\360\237\226\211/Test_Util_proxy.java" @@ -0,0 +1,93 @@ +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Proxy; + +import com.ReasoningTechnology.Mosaic.Mosaic_IO; +import com.ReasoningTechnology.Mosaic.Mosaic_Testbench; +import com.ReasoningTechnology.Mosaic.Mosaic_Util; +import com.ReasoningTechnology.Mosaic.Mosaic_Logger; + +public class Test_Util_proxy{ + + public class TestSuite{ + + public Boolean create_proxy_non_public_class( Mosaic_IO io ){ + Boolean[] conditions = new Boolean[2]; + int i = 0; + + try{ + Object proxy = Mosaic_Util.make_all_public_proxy( NonPublicClass.class ); + conditions[i++] = proxy != null; + conditions[i++] = Proxy.isProxyClass( proxy.getClass() ); + }catch( Exception e ){ + Mosaic_Logger.error("Test_Util_proxy" ,"create_proxy_non_public_class" ,e); + return false; + } + + return Mosaic_Util.all( conditions ); + } + + public Boolean invoke_proxied_non_public_method(Mosaic_IO io) { + Boolean[] conditions = new Boolean[2]; + int i = 0; + + try { + NonPublicInterface proxy = (NonPublicInterface) Mosaic_Util.make_all_public_proxy(NonPublicClass.class); + String result = proxy.hidden_method(); + conditions[i++] = result.equals("Accessed hidden method!"); + conditions[i++] = Proxy.isProxyClass(proxy.getClass()); + } catch (Exception e) { + Mosaic_Logger.error("invoke_proxied_non_public_method", "Unexpected exception: " + e.getMessage(), e); + return false; + } + + return Mosaic_Util.all(conditions); + } + + public Boolean create_and_invoke_public_class_proxy( Mosaic_IO io ){ + Boolean[] conditions = new Boolean[2]; + int i = 0; + + try{ + PublicInterface proxy = (PublicInterface) Mosaic_Util.make_all_public_proxy( PublicClass.class ); + String result = proxy.say_hello(); + conditions[i++] = result.equals( "Hello from PublicClass!" ); + conditions[i++] = Proxy.isProxyClass( proxy.getClass() ); + }catch( Exception e ){ + Mosaic_Logger.error("Test_Util_proxy" ,"create_and_invoke_public_class_proxy" ,e); + return false; + } + + return Mosaic_Util.all( conditions ); + } + + } + + public interface PublicInterface{ + String say_hello(); + } + + public static class PublicClass implements PublicInterface{ + @Override + public String say_hello(){ + return "Hello from PublicClass!"; + } + } + + interface NonPublicInterface{ + String hidden_method(); + } + + static class NonPublicClass implements NonPublicInterface{ + @Override + public String hidden_method(){ + return "Accessed hidden method!"; + } + } + + public static void main( String[] args ){ + Test_Util_proxy outer = new Test_Util_proxy(); + TestSuite suite = outer.new TestSuite(); + int result = Mosaic_Testbench.run( suite ); + System.exit( result ); + } +} diff --git a/tester/jvm/Test_Mosaic.jar b/tester/jvm/Test_Mosaic.jar index cc8fcf3f792992739169147176c9274fe7c3261b..7e5744de68c31052bb055f9624f702c3b5d8069f 100644 GIT binary patch delta 4292 zcmai22Urv7(+@oaP)cY9kftEg!B7Ng(xipn1PN6L5Ri^Q3{np1T|BDvDlMRhL6M@7 zD!qgBCP)=g_z2$r^zpp=X7|~7x4iSrJ2N}``)z|v>rE<{1`#m`00062n%)oMsd$O- zO0om5YRCwN2u}wyL@mUpgCbxI$>~7qjPCba(bSBjr&kIYlu1xT#9#mr2*lem1^gu3 zCu0LU56@eMo{rA9-0mQK{kXM}t}riaXGa?)XSj!lpbh>Q7~gvXqDvjt^tNs7TyF0b zs0)2WKBHNYA0Qt_n6LPUVp%=B=B~KvV2xdOM1Q^06VQuIf`B4DZ@QxB{!%!~{s_5n zeqm<+$=&RB?F>++4(1i@75F#lhUf-I+lq$5Sp@yn9PhGd@AJgS<7rNI>e2JFCZ?qc zUDtUcL^B}s7fq`d^%=dplf80(97nn(dnS$+Tq6YuIZhrxqJ@FNP&9Czy|+`CpB2yyIB(_HA& z2TubvgJ9?n0>DyvMui8s=UH!Jt6z}XLAq`eMyK8Lf&w^fJ`y|zRxp>D~C$HI^? z{K?nfg)BpRF@%~rJ)LlL8 z?%2a^?7pYXE=EC{Pyu`$HAR-rtO~P{M7!rer0!|Zaz!Z6S;;!uV|((}p?%T4rO!42 zY&fRzhgL35+mm33OVSpUJ=Gtt70jSa`S_QjYWFRrATN*4s`1x7n`W^#O2oBBa< znnN*3eyKWgCxl2eTjPu;ujJSDgljNP;D!5Tp9%26 zc^POU-+Hois*?cydvG{@6P%M`M*ULFv12y~b;0sO-u>?V)g9HB>33iX2L#GOdQ560 z7MAmp8EY-#bYksAO(lid;n%WbAGp!dMr1^oQ zAcDJ;SY&09QPhHV@LlAzWUVw-7t2uHxnxF>Tt~jEevB=hr5K>9g}JC=K@|qhqz9D` zG4&T|j7E?7C+Qlm%lf#Ig;QWU%l9^N7oku%QinHF_1o}}s=aU>6zb~34h*Hs7&b~W zN%ceJh?0`e&kFauHyH3JI?e%eMECeseQl|4#I>>bg^*{X+2vgisrF5FkmP?ovTZ;HD+g-?&KEY?fw zBsCJhtzFbfT2AG{$??~I^S#;pQn?l}RrtzP?j{b8_cznxrwF3wGE&+iavKGRwT?jxwGd}EUZt_6Mz3@|~lLF@Py z1xuzL>FN77PfP}+MO<-}Fm>KDQ{kXkFbOEaV1&=fVUOramoC@eW!N$d+|0)s7=`L0 z7K>>@j{XdjELGBc#tGF$^%4;PQ2$Y~=YJCte2DbD96kSfjiXb{jUhwy_nHKv#TDP&3{fCx zCv_g72{|_uG0POd0lPX4)D&Q^urOv-ArrBG$RT#$#$RK!K>hISm$O@suzB1l1g2Cc za4ELrxe6BrNAVf|G_k|A8lkDl!>FU}sf}ZD{>@Zzkq^>lVZ`b=8)=`$AJ$P7N`JH3 zP7@{K@awx%HeE+8r0Kkr7jndv?>B@=o>|HZ^+4dx;#SdisrxeftqMV{UPk*8F7Iwu zQcdY3&LnB;gjs$GQSY0`2r8mPO?mMbHWYNYv|}b#UhPz`LQ+go{T<}@pSQ*ELFz0f zOPQlsfQ%Haxh77Q_B;>DFLf03zO`qXuFaN{SPR^>(qQ6~aUCpo5QPvj1OkE#Yj=3(l+^D%5B8tN<<^BUJ^Y&|7ts z`d(t41C$$^6>d&rB?d_-{Yk@Db>`$!IF>d@=cao%0dt`ONe8DYxNs%O#+c zWo84IMJf`(Y{*6G`yDEY1308#YRW>%}8=qirhW_k#Sr!Iv zS3o|a9oCddcJ%}J<_1}Jt##7SB~iu3=?-mq5^ohA-TH*cm_aAImT57So8y zZ5*xTyR{^BRE1)wUT>vsh%Mf!TlcwgQGHRTxs~q1lkH@;kGmy`qI&k}v?9$}VR2R& zOpupUc^7pwk5~^N)U!715r7F9!Z1#fptjjZXkwkuQq6sC0-Jv46*F(K=O{CCX%jxp z`b_ra&R6fc)wqw$E-Pz{?#zQn(G`Kw403r*28@C4ra4}ta;6ca_O)xid(D;JZ(3oC ze-AxHI7Dk->!{&rQFM$(_(s>ben#nt>MI9GX+zCpOva3 zX$erM>z{*#4#Zv`pW-~8U=`ga5&+;m<$pmL`hR{GzJofiq*ZM?U2tfVmQdfBm= zVS4((x5Y&vtLRi|R&MbGDZRYV%)r^_x+i_#G-zVj*q%Mln7Csb%+3 zs$v})i(9Qgnk*btLzcypY(A2c3wegTTK!<)V)>9R>>Lp6f0IFagkS(glvVv=o`!u$pejTfEfZwAED{);?jR$&v5&j0%zr!74G$S zh-`6%@vw(+yt82UQL#!WehTe;vAv*_z>TibuU)sP#^~>?kF3+(*@#^>&$OCd7SH66VQXz+d-k3#UBvV(i!?#*Bd z{^}M{>2B+CaIa2waOJ%=5HmxsZ)R6zNE@GNO0REx*AWRG%2fe~}FJSanvp<7fJmdHw7`A^p`VTVw zw>i{bjQl602*4xcAEL|tZ}$El7k}wtWP}t3xWgx$N3X=Sy{C3{|0_eG`<1- f5LceRr~Pl%_jUx+AR)y+cJ^cgpVSA04}bQ5&m2m) delta 177 zcmX>av&)7zz?+$ci-CcIfuSj^b0V(>Gl;S{1EMywGhSx`GafP@VF5E%aP+Z)8J2v3 z5UE}PaW=5Xaxqs{UPdM^2DoXHwX`fiQj=4)%E9z~Ei*7Jp$!oa*7gST7iv3#>8INE ZU|L|GW7re diff --git "a/tester/tool\360\237\226\211/shell_wrapper_list" "b/tester/tool\360\237\226\211/bash_wrapper_list" similarity index 64% rename from "tester/tool\360\237\226\211/shell_wrapper_list" rename to "tester/tool\360\237\226\211/bash_wrapper_list" index b46116b..d578290 100755 --- "a/tester/tool\360\237\226\211/shell_wrapper_list" +++ "b/tester/tool\360\237\226\211/bash_wrapper_list" @@ -8,6 +8,5 @@ if [ "$ENV" != "$env_must_be" ]; then exit 1 fi -# space separated list of shell interface wrappers -echo Test0 Test_Util Test_IO Test_Testbench Test_MockClass_0 - +# space separated list of bash interface wrappers +echo Test0 Test_Util Test_IO Test_Testbench Test_MockClass_0 Test_Util_proxy diff --git "a/tester/tool\360\237\226\211/clean_build_directories" "b/tester/tool\360\237\226\211/clean_build_directories" index 11c7909..7c5a59b 100755 --- "a/tester/tool\360\237\226\211/clean_build_directories" +++ "b/tester/tool\360\237\226\211/clean_build_directories" @@ -1,11 +1,6 @@ #!/usr/bin/env bash script_afp=$(realpath "${BASH_SOURCE[0]}") -# Caveat: the 'shell' directory is for built wrapper -# functions. `clean_build_directories` will remove all the files in this -# directory. For bespoke scripts used by the tester, put them in the `tool` -# directory. - # input guards env_must_be="tester/tool🖉/env" if [ "$ENV" != "$env_must_be" ]; then diff --git "a/tester/tool\360\237\226\211/env" "b/tester/tool\360\237\226\211/env" index 42045a6..a5995d6 100644 --- "a/tester/tool\360\237\226\211/env" +++ "b/tester/tool\360\237\226\211/env" @@ -22,12 +22,15 @@ script_afp=$(realpath "${BASH_SOURCE[0]}") # class/source paths # ---- -# debug to find failing tests +# Settings to debug to find failing tests on release candidate. +# See next section for settings for debugging the sources. +# note the possible aliasing between the Test_$PROJECT and release classes export CLASSPATH=\ "$JAVA_HOME"/lib\ -:"$REPO_HOME"/release/"$PROJECT".jar\ +:"$REPO_HOME"/tester/config\ :"$REPO_HOME"/tester/jvm/Test_"$PROJECT".jar\ +:"$REPO_HOME"/release/"$PROJECT".jar\ :"$CLASSPATH" # note the developer sources on the scratchpad, if they are even there @@ -38,19 +41,38 @@ export SOURCEPATH=\ :"$SOURCEPATH" # ---- -# debug directly from developer sources +# for debugging developer sources # # export CLASSPATH=\ # "$JAVA_HOME"/lib\ -# :"$REPO_HOME"/developer/scratchpad\ +# :"$REPO_HOME"/tester/config\ # :"$REPO_HOME"/tester/jvm/Test_"$PROJECT".jar\ +# :"$REPO_HOME"/developer/scratchpad\ +# :"$LOGGER_FACADE" +# :"$LOGGER" # :"$CLASSPATH" +# developer must `distribute_source` for this to work # export SOURCEPATH=\ -# "$REPO_HOME"/tester/java🖉/\ +# "$REPO_HOME"/tester/javac🖉/\ # :"$REPO_HOME"/developer/scratchpad\ # :"$SOURCEPATH" +# ---- +# Another possible configuration is expand the developer release into scratchpad along with the tests. Then everything points at scratcpad. If the developer `distributed_source` to put the sources into the release candidate jar, the sources will be available in the debugger; however, editing them will not effect the developer's version (the origin version) of the sources. +# +# export CLASSPATH=\ +# "$JAVA_HOME"/lib\ +# :"$REPO_HOME"/tester/config\ +# :"$REPO_HOME"/tester/scratchpad\ +# :"$CLASSPATH" + +# developer must `distribute_source` for this to work +# export SOURCEPATH=\ +# "$REPO_HOME"/tester/javac🖉/\ +# "$REPO_HOME"/tester/scratchpad/\ +# :"$SOURCEPATH" + # end of the class/source path settings #`-------------------------------------------------------------------------------- diff --git "a/tester/tool\360\237\226\211/make" "b/tester/tool\360\237\226\211/make" index 208421a..9f86f68 100755 --- "a/tester/tool\360\237\226\211/make" +++ "b/tester/tool\360\237\226\211/make" @@ -17,10 +17,10 @@ echo "Compiling files..." jar cf jvm/Test_"$PROJECT".jar -C scratchpad . set +x -echo "Creating shell wrappers..." +echo "Creating bash wrappers..." mkdir -p bash # wrapper is a space separated list - wrapper=$(shell_wrapper_list) + wrapper=$(bash_wrapper_list) for file in $wrapper;do cat > bash/$file << EOL #!/bin/env bash diff --git "a/tester/tool\360\237\226\211/run_jdb" "b/tester/tool\360\237\226\211/run_jdb" index 9c472f4..8334c1b 100755 --- "a/tester/tool\360\237\226\211/run_jdb" +++ "b/tester/tool\360\237\226\211/run_jdb" @@ -2,7 +2,7 @@ script_afp=$(realpath "${BASH_SOURCE[0]}") # input guards -env_must_be="tester/tool/env" +env_must_be="tester/tool🖉/env" if [ "$ENV" != "$env_must_be" ]; then echo "$(script_fp):: error: must be run in the $env_must_be environment" exit 1 diff --git "a/tester/tool\360\237\226\211/run_tests" "b/tester/tool\360\237\226\211/run_tests" index 1ca7382..a4d29b8 100755 --- "a/tester/tool\360\237\226\211/run_tests" +++ "b/tester/tool\360\237\226\211/run_tests" @@ -6,16 +6,18 @@ if [ -z "$REPO_HOME" ]; then exit 1 fi -# Navigate to the shell directory +# Navigate to the bash directory cd "$REPO_HOME/tester/bash" || exit -# Get the list of test scripts in the specific order from shell_wrapper_list -test_list=$(shell_wrapper_list) +# Get the list of test scripts in the specific order from bash_wrapper_list +test_list=$(bash_wrapper_list) +echo test_list: $test_list # Execute each test in the specified order for file in $test_list; do + echo if [[ -x "$file" && ! -d "$file" ]]; then - echo -n "Running $file..." + echo "... Running $file" ./"$file" else echo "Skipping $file (not executable or is a directory)" diff --git "a/tool_shared/bespoke\360\237\226\211/env" "b/tool_shared/bespoke\360\237\226\211/env" index 598c31f..78d4452 100644 --- "a/tool_shared/bespoke\360\237\226\211/env" +++ "b/tool_shared/bespoke\360\237\226\211/env" @@ -42,8 +42,10 @@ fi # PATH="$REPO_HOME/tool_shared/third_party/idea-IC-243.21565.193/:$PATH" JAVA_HOME="$REPO_HOME/tool_shared/third_party/jdk-23.0.1" + LOGGER_FACADE="$REPO_HOME"/tool_shared/third_party/slf4j-api-2.0.9.jar + LOGGER="$REPO_HOME"/tool_shared/third_party/logback-classic-1.5.12.jar - export PATH JAVA_HOME + export PATH JAVA_HOME LOGGER_FACADE LOGGER # -------------------------------------------------------------------------------- # the following functions are provided for other scripts to use. diff --git "a/tool_shared/document\360\237\226\211/install.txt" "b/tool_shared/document\360\237\226\211/install.txt" index 637e543..ffdb55e 100644 --- "a/tool_shared/document\360\237\226\211/install.txt" +++ "b/tool_shared/document\360\237\226\211/install.txt" @@ -54,6 +54,15 @@ jdk-23 edit $REPO_HOME/tool_shared/bespoke/env, and update JAVA_HOME: export JAVA_HOME="$REPO_HOME/tool_shared/third_party/jdk-23.0.1" +---------------------------------------- +Logging + +curl -O https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.9/slf4j-api-2.0.9.jar + +curl -O https://repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.5.12/logback-classic-1.5.12.jar + +add to bespoke🖉/env names for these for use in CLASSPATH + ---------------------------------------- IDE -- 2.20.1