|
11 | 11 |
|
12 | 12 | (ns clojure.test-clojure.java-interop |
13 | 13 | (:use clojure.test) |
14 | | - (:require [clojure.inspector] |
15 | | - [clojure.set :as set]) |
| 14 | + (:require [clojure.data :as data] |
| 15 | + [clojure.inspector] |
| 16 | + [clojure.pprint :as pp] |
| 17 | + [clojure.set :as set] |
| 18 | + [clojure.test-clojure.proxy.examples :as proxy-examples]) |
16 | 19 | (:import java.util.Base64 |
17 | 20 | (java.util.concurrent.atomic AtomicLong AtomicInteger))) |
18 | 21 |
|
|
176 | 179 | str) |
177 | 180 | "chain chain chain"))) |
178 | 181 |
|
| 182 | +;https://clojure.atlassian.net/browse/CLJ-1973 |
| 183 | +(deftest test-proxy-method-order |
| 184 | + (let [class-reader (clojure.asm.ClassReader. proxy-examples/proxy1-class-name) |
| 185 | + method-order (atom []) |
| 186 | + method-visitor (proxy [clojure.asm.ClassVisitor] [clojure.asm.Opcodes/ASM4 nil] |
| 187 | + (visitMethod [access name descriptor signature exceptions] |
| 188 | + (swap! method-order conj {:name name :descriptor descriptor}) |
| 189 | + nil)) |
| 190 | + _ (.accept class-reader method-visitor 0) |
| 191 | + expected [{:name "<init>", :descriptor "()V"} |
| 192 | + {:name "__initClojureFnMappings", :descriptor "(Lclojure/lang/IPersistentMap;)V"} |
| 193 | + {:name "__updateClojureFnMappings", :descriptor "(Lclojure/lang/IPersistentMap;)V"} |
| 194 | + {:name "__getClojureFnMappings", :descriptor "()Lclojure/lang/IPersistentMap;"} |
| 195 | + {:name "clone", :descriptor "()Ljava/lang/Object;"} |
| 196 | + {:name "hashCode", :descriptor "()I"} |
| 197 | + {:name "toString", :descriptor "()Ljava/lang/String;"} |
| 198 | + {:name "equals", :descriptor "(Ljava/lang/Object;)Z"} |
| 199 | + {:name "a", :descriptor "(Ljava/io/File;)Z"} |
| 200 | + {:name "a", :descriptor "(Ljava/lang/Boolean;)Ljava/lang/Object;"} |
| 201 | + {:name "a", :descriptor "(Ljava/lang/Runnable;)Z"} |
| 202 | + {:name "a", :descriptor "(Ljava/lang/String;)I"} |
| 203 | + {:name "b", :descriptor "(Ljava/lang/String;)Ljava/lang/Object;"} |
| 204 | + {:name "c", :descriptor "(Ljava/lang/String;)Ljava/lang/Object;"} |
| 205 | + {:name "d", :descriptor "(Ljava/lang/String;)Ljava/lang/Object;"} |
| 206 | + {:name "a", :descriptor "(Ljava/lang/Boolean;Ljava/lang/String;)I"} |
| 207 | + {:name "a", :descriptor "(Ljava/lang/String;Ljava/io/File;)Z"} |
| 208 | + {:name "a", :descriptor "(Ljava/lang/String;Ljava/lang/Runnable;)Z"} |
| 209 | + {:name "a", :descriptor "(Ljava/lang/String;Ljava/lang/String;)I"}] |
| 210 | + actual @method-order] |
| 211 | + (is (= expected actual) |
| 212 | + (with-out-str (pp/pprint (data/diff expected actual)))))) |
179 | 213 |
|
180 | 214 | ;; serialized-proxy can be regenerated using a modified version of |
181 | 215 | ;; Clojure with the proxy serialization prohibition disabled and the |
|
0 commit comments