Skip to content

Commit

Permalink
logging: give simple names to the various appenders such that the nam…
Browse files Browse the repository at this point in the history
…es do not conflict when bundling
  • Loading branch information
Dierk Koenig committed Dec 14, 2024
1 parent 3879440 commit ef813ae
Show file tree
Hide file tree
Showing 17 changed files with 79 additions and 81 deletions.
2 changes: 1 addition & 1 deletion docs/src/allTests.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<h1>All Tests Report</h1>
<div id="out"></div>

<p> 1398 test(s) expected.</p>
<p> 1399 test(s) expected.</p>
<p id="grossTotal">Check console for possible errors.</p>

<footer></footer>
Expand Down
8 changes: 4 additions & 4 deletions docs/src/examples/logger/loggerExample.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ import {
setGlobalMessageFormatter
} from "../../kolibri/logger/logging.js";

import { Appender as ArrayAppender } from "../../kolibri/logger/appender/arrayAppender.js";
import { Appender as ConsoleAppender } from "../../kolibri/logger/appender/consoleAppender.js";
import { Appender as CountAppender } from "../../kolibri/logger/appender/countAppender.js";
import { LoggerFactory } from "../../kolibri/logger/loggerFactory.js";
import { ArrayAppender } from "../../kolibri/logger/appender/arrayAppender.js";
import { ConsoleAppender } from "../../kolibri/logger/appender/consoleAppender.js";
import { CountAppender } from "../../kolibri/logger/appender/countAppender.js";
import { LoggerFactory } from "../../kolibri/logger/loggerFactory.js";

const LOGGER_CONTEXT = "ch.fhnw.sample.logger";
const INITIAL_LOGGING_CONTEXT = "ch.fhnw";
Expand Down
6 changes: 3 additions & 3 deletions docs/src/examples/loggingControlUI/logUiExample.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Appender as ConsoleAppender } from "../../kolibri/logger/appender/consoleAppender.js";
import { LoggerFactory } from "../../kolibri/logger/loggerFactory.js";
import { projectLoggingUi, LOGGING_UI_CSS } from "../../kolibri/logger/loggingUi/loggingUiProjector.js";
import { ConsoleAppender } from "../../kolibri/logger/appender/consoleAppender.js";
import { LoggerFactory } from "../../kolibri/logger/loggerFactory.js";
import { projectLoggingUi, LOGGING_UI_CSS } from "../../kolibri/logger/loggingUi/loggingUiProjector.js";
import { LoggingUiController } from "../../kolibri/logger/loggingUi/loggingUiController.js";
import { addToAppenderList, setGlobalMessageFormatter } from "../../kolibri/logger/logging.js";
import { dom } from "../../kolibri/util/dom.js";
Expand Down
6 changes: 3 additions & 3 deletions docs/src/kolibri/logger/appender/arrayAppender.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
*/

import { id, T, LazyIf, churchBool } from "../../lambda/church.js";
import {Nothing} from "../../stdlib.js";
import { Nothing } from "../../stdlib.js";

export { Appender };
export { ArrayAppender };

const MAX_ARRAY_ELEMENTS = Number.MAX_SAFE_INTEGER - 1;
const MIN_ARRAY_LENGTH = 2;
Expand Down Expand Up @@ -36,7 +36,7 @@ const DEFAULT_CACHE_EVICTION_STRATEGY = cache => {
* If this parameter is not set, then all log messages until now will be discarded.
* @returns { AppenderType<Array<String>> }
*/
const Appender = (limit = MAX_ARRAY_ELEMENTS, cacheEvictionStrategy = DEFAULT_CACHE_EVICTION_STRATEGY) => {
const ArrayAppender = (limit = MAX_ARRAY_ELEMENTS, cacheEvictionStrategy = DEFAULT_CACHE_EVICTION_STRATEGY) => {
const calculatedLimit = MIN_ARRAY_LENGTH < limit ? limit : MIN_ARRAY_LENGTH;

let formatter = Nothing; // per default, we do not use a specific formatter.
Expand Down
14 changes: 7 additions & 7 deletions docs/src/kolibri/logger/appender/arrayAppenderTest.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {Appender} from "./arrayAppender.js";
import {id, T} from "../../lambda/church.js";
import {TestSuite} from "../../util/test.js";
import { ArrayAppender } from "./arrayAppender.js";
import { id, T } from "../../lambda/church.js";
import { TestSuite } from "../../util/test.js";

const { trace, debug, info, warn, error, fatal, getValue, reset } = Appender();
const { trace, debug, info, warn, error, fatal, getValue, reset } = ArrayAppender();

reset(); // clears the state of the appender

Expand Down Expand Up @@ -63,7 +63,7 @@ arrayAppenderSuite.add("test add all kind of levels to array appender", assert =

arrayAppenderSuite.add("test default appender overflow implementation", assert => {
// limit will be lifted to at least 2
const {trace, getValue, reset} = Appender(1);
const {trace, getValue, reset} = ArrayAppender(1);
const result = trace(msg1);
assert.is(getValue().length, 1);
assert.is(result, T);
Expand All @@ -85,7 +85,7 @@ arrayAppenderSuite.add("test custom limit implementation", assert => {
discardedValues = array;
return [];
};
const {trace, reset, getValue} = Appender(1, onLimitReached); // minimum of limit is 2
const {trace, reset, getValue} = ArrayAppender(1, onLimitReached); // minimum of limit is 2
assert.is(discardedValues.length, 0);
assert.is(getValue().length, 0);
trace(msg1);
Expand All @@ -104,7 +104,7 @@ arrayAppenderSuite.add("test custom limit implementation", assert => {
arrayAppenderSuite.add(
"test appender should fallback to default eviction strategy, if array reaches limit and has not been cleaned up.",
assert => {
const {trace, getValue, reset} = Appender(2, id);
const {trace, getValue, reset} = ArrayAppender(2, id);
trace(msg1);
trace(msg1);

Expand Down
8 changes: 4 additions & 4 deletions docs/src/kolibri/logger/appender/consoleAppender.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { T } from "../../lambda/church.js";
import {Nothing} from "../../lambda/maybe.js";
import { T } from "../../lambda/church.js";
import { Nothing } from "../../lambda/maybe.js";

export { Appender}
export { ConsoleAppender}

/**
* Provides console appender.
* Using this appender you are able to log to the console.
* @returns { AppenderType<void> }
* @constructor
*/
const Appender = () => {
const ConsoleAppender = () => {
let formatter = Nothing; // per default, we do not use a specific formatter.
const getFormatter = () => formatter;
const setFormatter = newFormatter => formatter = newFormatter;
Expand Down
8 changes: 4 additions & 4 deletions docs/src/kolibri/logger/appender/consoleAppenderTest.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {TestSuite} from "../../util/test.js";
import {Appender} from "./consoleAppender.js";
import {T} from "../../lambda/church.js";
import { TestSuite } from "../../util/test.js";
import { ConsoleAppender } from "./consoleAppender.js";
import { T } from "../../lambda/church.js";

const { trace, debug, info, warn, error, fatal } = Appender();
const { trace, debug, info, warn, error, fatal } = ConsoleAppender();

const consoleAppenderSuite = TestSuite("logger/Console Appender");

Expand Down
8 changes: 4 additions & 4 deletions docs/src/kolibri/logger/appender/countAppender.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import {T} from "../../lambda/church.js";
import {Nothing} from "../../lambda/maybe.js";
import { T } from "../../lambda/church.js";
import { Nothing } from "../../lambda/maybe.js";

export {Appender};
export {CountAppender};

/**
* Provides an appender that logs to the console how many log messages have been issued on the various levels.
* @returns { AppenderType<StatisticType> }
* @constructor
*/
const Appender = () => {
const CountAppender = () => {
let formatter = Nothing; // per default, we do not use a specific formatter.
const getFormatter = () => formatter;
const setFormatter = newFormatter => formatter = newFormatter;
Expand Down
8 changes: 4 additions & 4 deletions docs/src/kolibri/logger/appender/countAppenderTest.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {TestSuite} from "../../util/test.js";
import {Appender} from "./countAppender.js";
import {T} from "../../lambda/church.js";
import { TestSuite } from "../../util/test.js";
import { CountAppender } from "./countAppender.js";
import { T } from "../../lambda/church.js";

const { trace, debug, info, warn, error, fatal, getValue, reset } = Appender();
const { trace, debug, info, warn, error, fatal, getValue, reset } = CountAppender();
reset(); // clear the state of the appender since it is a singleton

const countAppenderSuite = TestSuite("logger/Count Appender");
Expand Down
6 changes: 3 additions & 3 deletions docs/src/kolibri/logger/appender/observableAppender.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
* The observable Appender is a decorator for other {@link AppenderType}s that notifies a listener about new log messages or
* other interesting events.
*/
import {LOG_DEBUG, LOG_ERROR, LOG_FATAL, LOG_INFO, LOG_NOTHING, LOG_TRACE, LOG_WARN} from "../logLevel.js";
import { LOG_DEBUG, LOG_ERROR, LOG_FATAL, LOG_INFO, LOG_NOTHING, LOG_TRACE, LOG_WARN } from "../logLevel.js";

export { Appender}
export { ObservableAppender}

/**
* @typedef { (logLevel: LogLevelType, msg: ?String) => void } AppendListenerType
Expand All @@ -22,7 +22,7 @@ export { Appender}
* AppenderType<_T_>
* }
*/
const Appender = appender => listener => {
const ObservableAppender = appender => listener => {

const trace = arg => { const x = appender.trace(arg); listener(LOG_TRACE, arg); return x };
const debug = arg => { const x = appender.debug(arg); listener(LOG_DEBUG, arg); return x };
Expand Down
8 changes: 4 additions & 4 deletions docs/src/kolibri/logger/appender/observableAppenderTest.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {Appender as ArrayAppender} from "./arrayAppender.js";
import {Appender as ObservableAppender} from "./observableAppender.js";
import {TestSuite} from "../../util/test.js";
import {LOG_DEBUG, LOG_NOTHING} from "../logLevel.js";
import { ArrayAppender } from "./arrayAppender.js";
import { ObservableAppender } from "./observableAppender.js";
import { TestSuite } from "../../util/test.js";
import { LOG_DEBUG, LOG_NOTHING } from "../logLevel.js";

const msg1 = "Some Log Message";

Expand Down
14 changes: 7 additions & 7 deletions docs/src/kolibri/logger/loggerTest.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { TestSuite, withAppender } from "../util/test.js";
import { Appender as ArrayAppender } from "./appender/arrayAppender.js";
import { Appender as CountAppender } from "./appender/countAppender.js";
import { LoggerFactory} from "./loggerFactory.js";
import { Just} from "../stdlib.js";
import { debugLogger} from "./logger.js";
import { LOG_DEBUG, LOG_NOTHING, LOG_TRACE, LOG_WARN } from "./logLevel.js";
import { TestSuite, withAppender } from "../util/test.js";
import { ArrayAppender } from "./appender/arrayAppender.js";
import { CountAppender } from "./appender/countAppender.js";
import { LoggerFactory } from "./loggerFactory.js";
import { Just } from "../stdlib.js";
import { debugLogger } from "./logger.js";
import { LOG_DEBUG, LOG_NOTHING, LOG_TRACE, LOG_WARN } from "./logLevel.js";

import {
addToAppenderList,
Expand Down
2 changes: 1 addition & 1 deletion docs/src/kolibri/logger/loggingSupport.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import {
} from "./logging.js"

import {
Appender as ConsoleAppender
ConsoleAppender as ConsoleAppender
} from "./appender/consoleAppender.js";

export {
Expand Down
4 changes: 2 additions & 2 deletions docs/src/kolibri/logger/loggingTest.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { TestSuite } from "../util/test.js";
import { Appender as ArrayAppender } from "./appender/arrayAppender.js";
import { TestSuite } from "../util/test.js";
import { ArrayAppender } from "./appender/arrayAppender.js";

import {
addToAppenderList,
Expand Down
10 changes: 5 additions & 5 deletions docs/src/kolibri/logger/loggingUi/loggingUiController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {Appender as CountAppender} from "../appender/countAppender.js";
import {Appender as ObservableAppender} from "../appender/observableAppender.js";
import { CountAppender } from "../appender/countAppender.js";
import { ObservableAppender } from "../appender/observableAppender.js";
import {
getLoggingLevel,
setLoggingLevel,
Expand All @@ -8,9 +8,9 @@ import {
setLoggingContext,
onLoggingContextChanged,
addToAppenderList, removeFromAppenderList
} from "../logging.js";
import {toString, fromString} from "../logLevel.js";
import {SimpleInputController} from "../../projector/simpleForm/simpleInputController.js";
} from "../logging.js";
import { toString, fromString } from "../logLevel.js";
import { SimpleInputController } from "../../projector/simpleForm/simpleInputController.js";

export {LoggingUiController};

Expand Down
27 changes: 12 additions & 15 deletions docs/src/kolibri/sequence/sequencePrototypeTest.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { TestSuite, withAppender} from "../util/test.js";
import {drop, forever, map, nil, Range, reduce$, Seq, Sequence, show, take, Walk} from "./sequence.js";
import { Just, Nothing } from "../stdlib.js";
import { Appender as ArrayAppender } from "../logger/appender/arrayAppender.js";
import { LOG_WARN } from "../logger/logLevel.js";
import { LOG_CONTEXT_KOLIBRI_SEQUENCE } from "./sequencePrototype.js";
import { TestSuite, withAppender } from "../util/test.js";
import { ALL, drop, map, nil, Range, reduce$, Seq, Sequence, show, take } from "./sequence.js";
import { Just, Nothing } from "../stdlib.js";
import { ArrayAppender } from "../logger/appender/arrayAppender.js";
import { LOG_WARN } from "../logger/logLevel.js";
import { LOG_CONTEXT_KOLIBRI_SEQUENCE } from "./sequencePrototype.js";

const testSuite = TestSuite("Sequence Prototype Suite");

Expand Down Expand Up @@ -46,10 +46,6 @@ testSuite.add("test prototype: toString, show", assert => {
});
});

testSuite.add("test prototype: count$", assert => {
assert.is(Walk(0).count$(), 1);
});

testSuite.add("test prototype: [==], eq$", assert => {
assert.isTrue(Range(0, 3).eq$ (Range(0, 3)));
assert.isTrue(Range(0, 3) ["=="] (Range(0, 3)));
Expand Down Expand Up @@ -118,8 +114,10 @@ testSuite.add("test prototype: terminal operations", assert => {
assert.is(Seq(1, 2, 3).head(), 1);
assert.is(nil.head(), undefined);
assert.is(nil.isEmpty(), true);
assert.is(nil.count$(), 0);
assert.is(Seq(1).isEmpty(), false);
assert.is(Seq(1,2,3).max$(), 3);
assert.is(Seq(1,2,3).count$(), 3);
assert.is(show(Seq(1,2,3).uncons()), "[1,[2,3]]");

let x = "";
Expand Down Expand Up @@ -159,7 +157,6 @@ testSuite.add("test prototype: composition", assert => {
.pipe(sort), // custom operator
Seq(50, 50, 51, 51));

const count = reduce$( acc => acc + 1, 0);
const collatz = x => Sequence(
x,
n => n > 2,
Expand All @@ -168,16 +165,16 @@ testSuite.add("test prototype: composition", assert => {
: 3 * n + 1);

const result = Range(2, 100_000)
.map(n => [n, count(collatz(n))] )
.map(n => [n, collatz(n).count$()] )
.max$((a, b) => a[1] < b[1]);
assert.iterableEq(result, [77031, 349]);

const sum = reduce$((acc, cur) => acc + cur, 0);
const product = reduce$((acc, cur) => acc * cur, 1);
const naturalNumbers = Range(1, Number.MAX_SAFE_INTEGER);
const alternatingSigns = Sequence(1, forever, x => -x);
const naturalNumbers = Range(1, ALL);
const alternatingSigns = Seq(1, -1).cycle();

// 3 + ( 4/(2*3*4) - 4/(4*5*6) + 4/(6*7*8) - 4/(8*9*10) + ...)
// Nilakantha series: 3 + ( 4/(2*3*4) - 4/(4*5*6) + 4/(6*7*8) - 4/(8*9*10) + ...)
const piFractions = naturalNumbers
.map( n => n * 2 )
.map( n => [n, n+1, n+2] )
Expand Down
21 changes: 11 additions & 10 deletions docs/src/kolibri/util/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,26 @@

/**
* @module util/test
* The test "framework", exports the Suite function plus a total of how many assertions have been tested
* The test utility, exports the Suite, helper functions, plus {@link Observable}s for
* how many assertions have been tested and whether any failed.
*/

import {accentColor, okColor} from "../style/kolibriStyle.js";
import {id, Just, Tuple} from "../stdlib.js";
import {Observable} from "../observable.js";
import {dom} from "./dom.js";
import {LoggerFactory} from "../logger/loggerFactory.js";
import { accentColor, okColor } from "../style/kolibriStyle.js";
import { id, Just, Tuple } from "../stdlib.js";
import { Observable } from "../observable.js";
import { dom } from "./dom.js";
import { LoggerFactory } from "../logger/loggerFactory.js";
import {
addToAppenderList,
getLoggingContext,
getLoggingLevel,
removeFromAppenderList,
setLoggingContext,
setLoggingLevel
} from "../logger/logging.js";
import {LOG_DEBUG} from "../logger/logLevel.js";
import {Appender as ConsoleAppender} from "../logger/appender/consoleAppender.js";
import {LOG_CONTEXT_All, LOG_CONTEXT_KOLIBRI_TEST} from "../logger/logConstants.js";
} from "../logger/logging.js";
import { LOG_DEBUG } from "../logger/logLevel.js";
import { ConsoleAppender } from "../logger/appender/consoleAppender.js";
import { LOG_CONTEXT_All, LOG_CONTEXT_KOLIBRI_TEST } from "../logger/logConstants.js";

export { TestSuite, total, failed, asyncTest, withAppender };

Expand Down

0 comments on commit ef813ae

Please sign in to comment.